前言
记录下leetcode每日一题
题目描述
字符串有三种编辑操作:插入一个字符、删除一个字符或者替换一个字符。 给定两个字符串,编写一个函数判定它们是否只需要一次(或者零次)编辑。
示例1
输入:
first = "pale"
second = "ple"
输出: True
示例2
输入:
first = "pales"
second = "pal"
输出: False
思路
- 根据题解字符串会出现以下情况
- 长度相同 循环两个字符串,判断每一个字符是否相同,如果不相同的出现2次,那么就不满足条件
- 长度不相同
- first 大于 second 1个字符
- first 小于 second 1个字符
- 两者长度相差大于2 必定超过2次编辑
- 对这些情况分别分析
代码
/**
* @param {string} first
* @param {string} second
* @return {boolean}
*/
var oneEditAway = function (first, second) {
// 先判断长度是否相差为1
let len1 = first.length;
let len2 = second.length;
// 大于1 表示至少2次
if (len1 - len2 === 1) {
return handleAway(first, second);
} else if (len2 - len1 === 1) {
return handleAway(second, first);
} else if (len1 === len2) {
let diff = false;
for (let i = 0; i < len1; i++) {
if (first[i] !== second[i]) {
if (!diff) {
diff = true;
} else {
return false;
}
}
}
return true;
} else {
return false;
}
};
function handleAway(longstr, shortstr) {
const len1 = longstr.length;
const len2 = shortstr.length;
let index1 = 0,
index2 = 0;
while (index1 < len1 && index2 < len2) {
if (longstr[index1] !== shortstr[index2]) {
// 不相同,移动长字符串的index
index1++;
} else {
index2++;
index1++;
}
if (index1 - index2 > 1) {
return false;
}
}
return true;
}
最后
每天进步一点点