This commit is contained in:
34
internal/utils/levenshtein_distance.go
Normal file
34
internal/utils/levenshtein_distance.go
Normal file
@@ -0,0 +1,34 @@
|
||||
package utils
|
||||
|
||||
import "strings"
|
||||
|
||||
func LevenshteinDistance(s1, s2 string) int {
|
||||
s1 = strings.ToLower(s1)
|
||||
s2 = strings.ToLower(s2)
|
||||
|
||||
len1 := len(s1)
|
||||
len2 := len(s2)
|
||||
|
||||
matrix := make([][]int, len1+1)
|
||||
for i := range matrix {
|
||||
matrix[i] = make([]int, len2+1)
|
||||
matrix[i][0] = i
|
||||
}
|
||||
for j := range matrix[0] {
|
||||
matrix[0][j] = j
|
||||
}
|
||||
|
||||
for i := 1; i <= len1; i++ {
|
||||
for j := 1; j <= len2; j++ {
|
||||
cost := 0
|
||||
if s1[i-1] != s2[j-1] {
|
||||
cost = 1
|
||||
}
|
||||
matrix[i][j] = min(
|
||||
matrix[i-1][j]+1,
|
||||
min(matrix[i][j-1]+1, matrix[i-1][j-1]+cost),
|
||||
)
|
||||
}
|
||||
}
|
||||
return matrix[len1][len2]
|
||||
}
|
||||
Reference in New Issue
Block a user