题目链接
一次编辑
题目描述
注意点
- 只能进行一次(或者零次)编辑
解答思路
- 首先判断两个字符串的长度,如果长度相差大于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;
    }
}
关键点
- 注意边界问题
- 只能进行一次编辑
- 什么时候做新增、删除、替换操作




















