字符串有三种编辑操作:插入一个字符、删除一个字符或者替换一个字符。 给定两个字符串,编写一个函数判定它们是否只需要一次(或者零次)编辑。
示例 1:
输入:
first = “pale”
second = “ple”
输出: True
示例 2:
输入:
first = “pales”
second = “pal”
输出: False
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/one-away-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解法一:
因为答主是前端开发,所以答题使用的是js
大体思路是:
- 先判断两个字符串长度相差是否超过2
- first,second两串,保证first长度大于second,否则对两串进行置换;
- 采用前后指针的方法进行解题:先从两串首对两串进行比对,若出现不同,则记录下该位置(以长串first为准),再从两串尾对两串进行比对,比对到之前记录下的位置为止。
代码
/**
* @param {string} first
* @param {string} second
* @return {boolean}
*/
var oneEditAway = function(first, second) {
if(Math.abs(first.length - second.length) > 1) return false;
if(first.length < second.length){
let tem = first;
first = second;
second = tem;
}
let flag = 0;
let i;
let lenF = first.length-1 , lenS = second.length-1;
for(i = 0 ; i < first.length ; i++){
if(first.charAt(i) != second.charAt(i)){
flag = i;
break
}
}
while(flag < lenF){
if(first.charAt(lenF--) != second.charAt(lenS--)){
return false;
}
}
return true;
};