一次编辑

197 阅读1分钟

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

示例 1:

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

示例 2:

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

分析题意可知,如果两个字符串长度差值大于1,则直接返回false;如果相等,执行的是替换操作,如果大于是执行的删除操作,如果小于执行的是插入操作。

因为只进行了一次操作,我们可以找到操作的地方,然后跳过,判断后面的字符串是否相等,如果相等则只需要一次编辑

var oneEditAway = function(first, second) {
    if(Math.abs(first.length-second.length)>1){
        return false;
    }
    if(first===second){
        return true;
    }
    if(first.length>second.length){
        [second,first]=[first,second]
    }
    for(let i=0;i<first.length;i++){
        if(first[i]!==second[i]){
            return first.slice(i+1)===second.slice(i+1)//字符串相等
            ||first.slice(i)===second.slice(i+1);//字符串不相等
        }
    }
    return true;
};