mirror of
https://github.com/kovidgoyal/kitty.git
synced 2024-10-06 02:57:33 +03:00
47 lines
828 B
Go
47 lines
828 B
Go
// License: GPLv3 Copyright: 2022, Kovid Goyal, <kovid at kovidgoyal.net>
|
|
|
|
package utils
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
var _ = fmt.Print
|
|
|
|
// compares two strings and returns the Levenshtein distance between them.
|
|
func LevenshteinDistance(s, t string, ignore_case bool) int {
|
|
if ignore_case {
|
|
s = strings.ToLower(s)
|
|
t = strings.ToLower(t)
|
|
}
|
|
d := make([][]int, len(s)+1)
|
|
for i := range d {
|
|
d[i] = make([]int, len(t)+1)
|
|
}
|
|
for i := range d {
|
|
d[i][0] = i
|
|
}
|
|
for j := range d[0] {
|
|
d[0][j] = j
|
|
}
|
|
for j := 1; j <= len(t); j++ {
|
|
for i := 1; i <= len(s); i++ {
|
|
if s[i-1] == t[j-1] {
|
|
d[i][j] = d[i-1][j-1]
|
|
} else {
|
|
min := d[i-1][j]
|
|
if d[i][j-1] < min {
|
|
min = d[i][j-1]
|
|
}
|
|
if d[i-1][j-1] < min {
|
|
min = d[i-1][j-1]
|
|
}
|
|
d[i][j] = min + 1
|
|
}
|
|
}
|
|
|
|
}
|
|
return d[len(s)][len(t)]
|
|
}
|