面试题. 一次编辑

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

示例 1:

输入: 
first = "pale"
second = "ple"
输出: True

示例 2:

输入: 
first = "pales"
second = "pal"
输出: False

代码如下:

//只进行一次编辑有三种情况
//1.替换,两个字符串的长度相等,但其中有一个字符不相等
//2.插入,first<second,并且只有一个字符不一样
//3.删除,first>second,并且只有一个字符不一样
class Solution {
public:
    bool oneEditAway(string first, string second) {
        int m=first.size();
        int n=second.size();
        if(n-m>1||m-n>1)
        {
            return false;//两个字符串的长度相差大于1,不只进行一次操作
        }
        if(n==m+1)
        {
            return oneEditAway(second,first);//插入-->与删除刚好相反
        }
        int i=0,j=0;
        int count=0;
        while(i<m&&j<n)
        {
            if(first[i]!=second[j])
            {
                count++;
                if(count>=2)
                {
                    return false;
                }
                if(m>n)//删除
                {
                    j--;//为了让原地等待,先回退一步,后面会在向右移一步
                }
            }
            i++;//每次向右移一步
            j++;//每次向左移一步

        }
        return true;

    }
};

猜你喜欢

转载自blog.csdn.net/m0_62379712/article/details/132250757