22/5/13-字符串编辑操作

字符串有三种编辑操作:插入一个字符、删除一个字符或者替换一个字符。 给定两个字符串,编写一个函数判定它们是否只需要一次(或者零次)编辑。

class Solution {
    public boolean oneEditAway(String first, String second) {
        int m = first.length();
        int n = second.length();
        if (n - m == 1) {
            return oneEditAway(second, first);//统一将first作为长字符串
        }
        if (n - m > 1 || m - n > 1) {//若两者相差大于一,则必定false
            return false;
        }
        if (m == n) {//长度相等的情况
            int sameCount = 0;//记录编辑次数
            for (int i = 0; i < m; i++) {
                if (first.charAt(i) != second.charAt(i)) {
                    sameCount++;
                }
                if (sameCount > 1) {
                    return false;
                }
            }
        } else {//长度不等的情况,使用双指针
            int f = 0;
            int s = 0;
            while (f < m && s < n) {
                //若字符不同,删掉长字符串中字符,即将f指针加一
                if (first.charAt(f) != second.charAt(s)) {
                    f++;
                } else {
                    f++;
                    s++;
                }
                if (f - s > 1) {//判断,若两个指针相差大于1,则返回false
                    return false;
                }
            }
        }
        return true;
    }
}
posted @ 2022-05-13 19:34  Arthurma  阅读(84)  评论(0编辑  收藏  举报