解题方法:
- 分情况讨论:
- 当两字符串长度相差大于1时:不可能
- 当两字符串长度相等时:判断替换次数是否小于等于一
- 当两字符串长度相差为1时:遍历长的,看短的是否能只用一次插入就完成
目前只有一种解决方案,时间复杂度为O(n),空间复杂度为O(n)
解法一:
巧妙的点在于当长度相差1时,可以再次调用函数,传入参数时将first
和second
对调即可
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| #include<cmath>
class Solution { public: bool oneEditAway(string first, string second) { if(first == second) return true; if(first.size() == second.size()) { int flag = 0; for(int i=0; i<first.size(); ++i) { if(first[i] != second[i]) { flag++; } } return flag <= 1; } if((first.size() - second.size()) == 1) { bool flag = false; for(int i=0, j=0; i<first.size(); ++i, ++j) { if(first[i] != second[j]) { if(flag) { return false; } flag = true; --j; } } return true; } if((first.size() - second.size()) == -1) { return oneEditAway(second, first); } return false; } };
|