这题自己想的过于复杂,其实用双指针分别从字符串的头尾遍历就可以了。
以下是来自LeetCode题解:
分别从两个字符串的两边向中间匹配,一旦不一样就停止,这时剩下的first[i,j]first[i,j]和second[i,k]second[i,k]如果长度均小于等于1(注意临界条件)则结果为True,否则False。
时间复杂度:O(n)O(n)
空间复杂度:O(1)O(1)
public bool OneEditAway(string first, string second)
{
if(first==second){
return true;
}
int len1=first.Length;
int len2=second.Length;
if(Math.Abs(len1-len2)>1){
return false;
}
int i=0,j=len1-1,k=len2-1;
while(i<len1 && i<len2 && first[i]==second[i]){ // i从左至右扫描
i++;
}
while(j>=0 && k>=0 && first[j]==second[k]){ // j、k从右至左扫描
j--;
k--;
}
return j-i<1 && k-i<1;
}
作者:blankError
链接:https://leetcode-cn.com/problems/one-away-lcci/solution/jian-dan-zhi-jie-shuang-zhi-zhen-by-blankerror/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。