面试题 01.05. 一次编辑
题目链接
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/one-away-lcci/
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题目分析
参考链接:面试题 01.05. 一次编辑(清晰图解)
两字符串 first , second 能够通过一次(或者零次)编辑互相转换的「充要条件」为:
1.first , second 的长度之差 为0或1
2.长度之差 为0时:两字符串各对应位置只有一个字符不同;
3.长度之差 为1时:较短字符串仅需在某位置添加一个字符,即可转化为较长字符串;
注:ofs偏移之后要重新判断偏移后的位置字符是否相同,不可以跳过此位置。
class Solution {
public:
bool oneEditAway(string first, string second) {
int m = first.size(), n = second.size();
if(m > n){
string temp = first;
first = second;
second = temp;
}
//m < n
if(n - m > 1){
return false;
}
if(n == m){
int count = 0;//记录对应位置字符不一致的个数
for(int i = 0; i < n; i++){
if(first[i] != second[i]){
count++;
}
}
return count <= 1;
}
// //n - m == 1
int ofs = 0;//定义偏移量
for(int i = 0; i < m; i++){
if(first[i] != second[i + ofs]){
ofs++;
i--;//此位置注意!!!!!
if(ofs > 1){
return false;
}
}
}
return true;
}
};