Ich wurde diese Frage in einem technischen Interview gestellt. Frage ist: gegeben ein Ziel, und ein Array von Zeichenfolgen, geben Sie ein Array zurück, das alle Zeichenfolgen mit nur einer Differenz zum Ziel enthält.Wie testen, ob Zeichenfolgen nur eine Differenz effizient enthalten?
Zum Beispiel, wenn Ziel ist Katze, Catt, CaT, caa, ca, um < - sind alle nur ein Unterschied. Und umgekehrt, Katze, Katze, Hund, Blume, c < - sind kein Unterschied und sollten nicht zurückgegeben werden.
oneDiff (String Ziel, String [] a) ...
Mein Ansatz war:
ans = []
for all element e in the array
count -> 0
if absoulte(e's length - target length) > 1
continue
endif
for all character c in e
scan through, increment count if difference is found.
endfor
if (count == 1)
continue
else
add e to ans
endfor
return ans
Aber der Interviewer war nicht glücklich mit dem, was oben ist. Hat jemand effiziente/schlaue Ideen?
Dank
Die Implementierung von https://en.wikipedia.org/wiki/Levenshtein_distance sollte ausreichen. – zubergu
Was ist mit 'ccat'? Sollte das einen Unterschied von 1 haben? –
@zubergu, LD ist normalerweise O (n * m) und wurde offensichtlich zu O (max (n, m)) optimiert. Der lineare Scan ist O (min (n, m)). –