20size_t levenshtein_n(
const char *a,
const size_t length,
const char *b,
const size_t bLength) {
34 size_t *cache =
SAFE_CALLOC(length,
sizeof(
size_t),
size_t *);
47 while (index < length) {
48 cache[index] = index + 1;
53 while (bIndex < bLength) {
55 result = distance = bIndex++;
57 for (index = 0; index < length; index++) {
58 bDistance = code == a[index] ? distance : distance + 1;
59 distance = cache[index];
61 cache[index] = result = distance > result ? bDistance > result ? result + 1 : bDistance
62 : bDistance > distance ? distance + 1
76 const size_t length = strlen(a);
77 const size_t bLength = strlen(b);
83 if (!unknown || !candidates) {
87 const char *best_match = NULL;
88 size_t best_distance = SIZE_MAX;
90 for (
int i = 0; candidates[i] != NULL; i++) {
92 if (dist < best_distance) {
94 best_match = candidates[i];
#define SAFE_CALLOC(count, size, cast)
const char * levenshtein_find_similar(const char *unknown, const char *const *candidates)
Find the most similar string from a NULL-terminated array.
size_t levenshtein_n(const char *a, const size_t length, const char *b, const size_t bLength)
Calculate Levenshtein distance with explicit string lengths.
#define LEVENSHTEIN_SUGGESTION_THRESHOLD
Maximum edit distance to suggest an option.
size_t levenshtein(const char *a, const char *b)
Calculate Levenshtein distance between two strings.
Levenshtein distance algorithm for fuzzy string matching.
Common SIMD utilities and structures.