请注意,它不需要真正计算Levenshtein编辑距离。只是检查它是否为1。
方法的签名可能如下所示:
bool Is1EditDistance(string s1, string s2).
例如: 1.“abc”和“ab”返回true 2.“abc”和“aebc”返回true 3.“abc”和“a”返回false。
我尝试了递归批准,但效率不高。
更新:得到了朋友的回答:
for (int i = 0; i < s1.Length && i < s2.Length; i++)
{
if (s1[i] != s2[i])
{
return s1.Substring(i + 1) == s2.Substring(i + 1) //case of change
|| s1.Substring(i + 1) == s2.Substring(i) //case of s1 has extra
|| s1.Substring(i) == s2.Substring(i + 1); //case of s2 has extra
}
}
return Math.Abs(s1.Length - s2.Length) == 1;
答案 0 :(得分:6)
如果您只关心距离是否为1,您可以这样做:
n
,请对所有i = 0..n
进行s1[i] == s2[i]
循环i
除外。n
和n+1
,请i
为s1[i] != s2[i]
的最小索引,然后循环j=i..n
检查s1[j] == s2[j+1]
适用于所有j
。