面试题 01.05. 一次编辑
解法一:三指针 + 头尾遍历
如果两个字符串为空则返回 true
;
如果两个字符串长度相差超过 1,则返回 false
;
然后开始从第一位比较字符串,直到遇到不同的字符,记住下标i
;
再从两个字符串末尾开始比较,直到遇到不同的字符,记住两个下标 j
和 k
;
此时可以成功的情况只有以下两种种:
1、j + 1
或 k + 1
等于 i
(前面已经判断,字符串长度差不会大于 1
,所以这种情况下,差异不会超过 1 位);
2、j
、k
、i
三者值相等
/**
* @param {string} first
* @param {string} second
* @return {boolean}
*/
var oneEditAway = function (first, second) {
if (!first || !second) {
return true;
}
const fl = first.length;
const sl = second.length;
if (Math.abs(fl - sl) > 1) {
return false;
}
let i = 0;
while (first[i] === second[i] && i < fl && i < sl) {
i++;
}
if (i === fl || i === sl) {
return true;
}
let j = fl,
k = sl;
while (first[j] === second[k]) {
j--;
k--;
}
if (j + 1 === i || k + 1 === i || (j === k && j === i)) {
return true;
}
return false;
};