@@ -3,7 +3,7 @@ const std = @import("std");
3
3
/// Calculates the Levenshtein distance between two strings using Wagner-Fischer algorithm
4
4
/// Space Complexity: O(min(m,n)) - only uses two arrays instead of full matrix
5
5
/// Time Complexity: O(m*n) where m and n are the lengths of the input strings
6
- fn levenshteinDistance (allocator : std.mem.Allocator , s1 : []const u8 , s2 : []const u8 ) ! usize {
6
+ fn levenshteinDistance (s1 : []const u8 , s2 : []const u8 ) usize {
7
7
// Early termination checks
8
8
if (std .mem .eql (u8 , s1 , s2 )) return 0 ;
9
9
if (s1 .len == 0 ) return s2 .len ;
@@ -17,14 +17,12 @@ fn levenshteinDistance(allocator: std.mem.Allocator, s1: []const u8, s2: []const
17
17
const n = str2 .len ;
18
18
19
19
// Use two arrays instead of full matrix for space optimization
20
- var prev_row = try allocator .alloc (usize , m + 1 );
21
- defer allocator .free (prev_row );
22
- var curr_row = try allocator .alloc (usize , m + 1 );
23
- defer allocator .free (curr_row );
20
+ var prev_row : [256 ]usize = undefined ;
21
+ var curr_row : [256 ]usize = undefined ;
24
22
25
23
// Initialize first row
26
- for (prev_row , 0.. ) | * cell , i | {
27
- cell .* = i ;
24
+ for (0.. m + 1 ) | i | {
25
+ prev_row [ i ] = i ;
28
26
}
29
27
30
28
// Main computation loop
@@ -47,9 +45,7 @@ fn levenshteinDistance(allocator: std.mem.Allocator, s1: []const u8, s2: []const
47
45
}
48
46
49
47
// Swap rows
50
- const temp = prev_row ;
51
- prev_row = curr_row ;
52
- curr_row = temp ;
48
+ @memcpy (prev_row [0.. m + 1 ], curr_row [0.. m + 1 ]);
53
49
}
54
50
55
51
return prev_row [m ];
@@ -78,7 +74,7 @@ pub fn main() !void {
78
74
var j : usize = 1 ;
79
75
while (j < args .len ) : (j += 1 ) {
80
76
if (i != j ) {
81
- const distance = try levenshteinDistance (allocator , args [i ], args [j ]);
77
+ const distance = levenshteinDistance (args [i ], args [j ]);
82
78
if (min_distance == -1 or distance < @as (usize , @intCast (min_distance ))) {
83
79
min_distance = @as (isize , @intCast (distance ));
84
80
}
0 commit comments