실제로 편집 거리를 계산할 필요가 없습니다. 그냥 1인지 확인하십시오.Levenshtein 편집 거리가 1 문자열인지 확인하는 방법
메소드의 서명은 다음과 같이 보일 수 있습니다 :
예를 들어bool Is1EditDistance(string s1, string s2).
: 1. "ABC"와 "AB"반환 사실 2. "abc 방송"과 "aebc"true를 반환 3 "abc"및 "a"는 false를 반환합니다.
재귀 적 승인을 시도했지만 효율적이지 않습니다.
업데이트 : 거리가 정확히 1인지 아닌지 만 신경 경우
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;
편집 거리는 어느 것입니까? 레벤 시틴? 해밍? – Bitwise
이 질문을 좀 더 자세히 설명해 주시겠습니까? 아마도 당신이 시도한 것을 말해 줄 수 있습니까? – senderle
B/W 문자열로 정의 된 여러 유형의 거리가 있습니다 .Jaro-Winkler 거리, Hamming, Levenshtein ... 어느 것이죠? –