题目链接
一次编辑
题目描述
注意点
- 只能进行一次(或者零次)编辑
解答思路
- 首先判断两个字符串的长度,如果长度相差大于1,说明一次编辑无法通过一次编辑变换而来
- 通过两个指针idx1和idx2指向first和second,初始idx1和idx2指向的都是同一个位置,当某个位置处的字符不同,需要根据first和second长度关系修改idx1和idx2:如果长度相同,说明只能进行编辑操作,idx1和idx2都要向前一步;如果first比second长度小1,说明只能进行新增操作,idx2向前一步;如果second比first长度小1,说明只能进行删除操作,idx1向前一步
代码
class Solution {
public boolean oneEditAway(String first, String second) {
int m = first.length();
int n = second.length();
if (Math.abs(m - n) > 1) {
return false;
}
for (int i = 0; i < m && i < n; i++) {
// 长度不同,根据first和second之间的长度关系修改指针指向的位置
if (first.charAt(i) != second.charAt(i)) {
int firstIdx = (m >= n ? 1 : 0);
int secondIdx = (m <= n ? 1 : 0);
return judgeRemain(first, second, i + firstIdx, i + secondIdx);
}
}
return true;
}
public boolean judgeRemain(String first, String second, int idx1, int idx2) {
while (idx1 < first.length() && idx2 < second.length()) {
if (first.charAt(idx1) != second.charAt(idx2)) {
return false;
}
idx1++;
idx2++;
}
return true;
}
}
关键点
- 注意边界问题
- 只能进行一次编辑
- 什么时候做新增、删除、替换操作