解题思路:
非常简单的一道模拟题,首先如果字符串长度差距1以上返回false,字符串相等返回true,定义双指针分别遍历两个字符串,遇到对应位置相等继续,不等又分两种情况,如果是长度相同,那么都跳一位,不等,长的跳一位,短的不动,代码如下:
class Solution {
public:
bool oneEditAway(string first, string second) {
if(first == second) return true;
int n1 = first.size(), n2 = second.size();
if(abs(n1 - n2) > 1) return false;
int count = 0;
int i = 0, j = 0;
while(i < n1 && j < n2) {
if(first[i] != second[j]) {
if(n1 != n2) {
if(n1 > n2) i ++;
else j ++;
} else {
i ++;
j ++;
}
count ++;
if(count > 1) return false;
} else {
i ++;
j ++;
}
}
return true;
}
};
简单优化一下即为:
class Solution {
public:
bool oneEditAway(string first, string second) {
if(first == second) return true;
int n1 = first.size(), n2 = second.size();
if(abs(n1 - n2) > 1) return false;
int count = 0;
int i = 0, j = 0;
while(i < n1 && j < n2) {
if(first[i] != second[j]) {
if(n1 != n2) {
if(n1 > n2) j --;
else i --;
}
count ++;
if(count > 1) return false;
}
i ++;
j ++;
}
return true;
}
};