Die Levenshtein Abstand, auch bekannt als Editierdistanz, ist eine Metrik die Differenz zwischen zwei Zeichenketten für die Messung. Die Umsetzung ist here:
func levenshteinDist(test: String, key: String) -> Int {
let empty = Array<Int>(repeating:0, count: key.count)
var last = [Int](0...key.count)
for (i, testLetter) in test.enumerated() {
var cur = [i + 1] + empty
for (j, keyLetter) in key.enumerated() {
cur[j + 1] = testLetter == keyLetter ? last[j] : min(last[j], last[j + 1], cur[j]) + 1
}
last = cur
}
return last.last!
}
Sie können es wie folgt:
let test1 = "Test©/Testing© Keyword Finder"
let test2 = "Test© Word Finder"
let test3 = "Number Categorizer"
let test4 = "Alphabet in Order"
let key = "Test Testing Keyword"
print(levenshteinDist(test: test1, key: key)) // 10
print(levenshteinDist(test: test2, key: key)) // 14
print(levenshteinDist(test: test3, key: key)) // 18
print(levenshteinDist(test: test4, key: key)) // 15
print(levenshteinDist(test: key, key: key)) // 0
Wie Sie sehen können, levensthlindist(test: key, key: key)
Ausgänge 0
, da die Saiten gleich sind. Auch die Mindestleistung ist 10
und entspricht den erwarteten Teststrang.
Vielen Dank! – ch1maera