私は最近この質問に出くわしました:
Given two strings, return true if they are one edit away from each other,else return false.
An edit is insert/replace/delete a character.
Ex. {"abc","ab"}->true, {"abc","adc"}->true, {"abc","cab"}->false
この問題を解決する 1 つの方法は、動的計画法を使用して 2 つの文字列間の編集距離を見つけ、それが 1 かどうかを確認することです。これには O(N2) 時間かかります。1編集離れているかどうかを確認するだけなので、線形時間でこれを行う方法はありますか?
以下に書いたコードはほとんどの場合に機能しますが、{"m",""} のような場合には失敗します
public boolean isOneEditDistance(String s1,String s2){
if(s1==null || s2==null)
return true;
if(s1.equals(s2))
return false;
if (Math.abs(s1.length() - s2.length()) > 1)
return false;
int i = -1;
int j = -1;
while (true)
{
i++;
j++;
if (i == s1.length())
return true;
if (s1.charAt(i) == s2.charAt(j))
continue;
if (i != j)
return false;
if (s1.length() < s2.length())
i--;
else
j--;
}
}