fixed bug in levenschtein distance
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Wed, 24 Nov 2021 03:29:46 +0000 (21:29 -0600)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Wed, 24 Nov 2021 03:29:46 +0000 (21:29 -0600)
src/utils.c

index fe9f5b80a9d26b0147399ed10167c6b7fe612755..336841e355f71823b901a568ce232f099b43d14c 100644 (file)
@@ -989,8 +989,8 @@ char* lookup_included_file(char* filename, char* relative_to, b32 add_onyx_suffi
 }
 
 u32 levenshtein_distance(const char *str1, const char *str2) {
-    i32 m = strlen(str1);
-    i32 n = strlen(str2);
+    i32 m = strlen(str1) + 1;
+    i32 n = strlen(str2) + 1;
 
     i32 *d = bh_alloc_array(global_scratch_allocator, i32, m * n);
     fori (i, 0, m * n) d[i] = 0;
@@ -998,9 +998,9 @@ u32 levenshtein_distance(const char *str1, const char *str2) {
     fori (i, 0, m) d[i * n + 0] = i;
     fori (j, 0, n) d[0 * n + j] = j;
 
-    fori (j, 0, n) {
-        fori (i, 0, m) {
-            i32 subst_cost = str1[i] == str2[j] ? 0 : 1;
+    fori (j, 1, n) {
+        fori (i, 1, m) {
+            i32 subst_cost = str1[i - 1] == str2[j - 1] ? 0 : 1;
 
             i32 a = d[(i - 1) * n + j] + 1;
             i32 b = d[i * n + (j - 1)] + 1;