题目
字符串有三种编辑操作:插入一个英文字符、删除一个英文字符或者替换一个英文字符。 给定两个字符串,编写一个函数判定它们是否只需要一次(或者零次)编辑。
解题思路
- 由题可知,需要1次或者0次编辑,且编辑的是字符,所以两个字符串长度必须小于等于1
- 先计算两个字符串长度的差值,如果大于1直接false
- 然后分类讨论差值为1和差值为0的情况,如果为0,则需要统计不一样的字符数,统计出来count<=1就true
- 如果为1,有0个字符和1个字符的情况,直接true,
- 如果为1,长字符串的情况,如teacher和treacher,则需要一次对比,将多余的剔除后对比是否一样,一样就true
代码
/**
* @param {string} first
* @param {string} second
* @return {boolean}
*/
var oneEditAway = function (first, second) {
let len1 = first.length;
let len2 = second.length;
let distance = Math.abs(len1 - len2);
if (distance <= 1) {
if (distance === 0) {
let count = 0;
for (let i = 0; i < first.length; i++) {
if (first[i] !== second[i]) {
count++;
}
}
return count <= 1;
} else if (distance === 1) {
if (len1 <= 1 || len2 <= 1) {
return true;
}
let str1 = len1 > len2 ? first : second;
let str2 = len1 < len2 ? first : second;
for (let i = 0; i < str1.length; i++) {
if (str1[i] !== str2[i]) {
return str1.substring(i + 1) === str2.substring(i)
}
}
}
}
return false;
};