35 lines
587 B
Go
35 lines
587 B
Go
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]
|
|
}
|