You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
edit-distance/werner.go

46 lines
813 B

package editdistance
import (
"strings"
)
func Werner(a, b string) int {
phrase_a := strings.Fields(a)
phrase_b := strings.Fields(b)
m := len(phrase_a) + 1
n := len(phrase_b) + 1
distances := make([][]int, n)
for i := range distances {
distances[i] = make([]int, m)
}
// make the inital numbers on the top
for i := 1; i < n; i++ {
distances[i][0] = i
}
// make the inital numbers on the left side
for i := 1; i < m; i++ {
distances[0][i] = i
}
for i := 1; i < n; i++ {
for j := 1; j < m; j++ {
subCost := 0
if strings.EqualFold(phrase_a[j-1], phrase_b[i-1]) {
subCost = 0
} else {
subCost = 1
}
value := min(
distances[i-1][j]+1,
distances[i][j-1]+1,
distances[i-1][j-1]+subCost,
)
distances[i][j] = value
}
}
return distances[n-1][m-1]
}