package leven4cj
public func leven(firstString: String, secondString: String): Int64 {
if (firstString == secondString) {
return 0
}
if (firstString.isEmpty()) {
return secondString.size
}
if (secondString.isEmpty()) {
return firstString.size
}
let firstRuneArray = firstString.toRuneArray()
let secondRuneArray = secondString.toRuneArray()
let dynamicTable = Array(firstRuneArray.size + 1, {_ => Array(secondRuneArray.size + 1, repeat: 0)})
for (i in 0..=firstRuneArray.size) {
dynamicTable[i][0] = i
}
for (j in 0..=secondRuneArray.size) {
dynamicTable[0][j] = j
}
for (i in 1..=firstRuneArray.size) {
for (j in 1..=secondRuneArray.size) {
if (firstRuneArray[i - 1] == secondRuneArray[j - 1]) {
dynamicTable[i][j] = dynamicTable[i - 1][j - 1]
} else {
let insert = dynamicTable[i][j - 1] + 1
let delete = dynamicTable[i - 1][j] + 1
let substitute = dynamicTable[i - 1][j - 1] + 1
dynamicTable[i][j] = min(min(insert, delete), substitute)
}
}
}
return dynamicTable[firstRuneArray.size][secondRuneArray.size]
}