持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第14天,点击查看活动详情
现在前端很多岗位面试需要有一定的算法基础,或者说经常刷算法的会优先考虑。
因此每天刷刷LeetCode非常有必要
在这之前我也刷过一些算法题,也希望以后也坚持刷,跟某掘友一样,我也想刷穿 LeetCode
一、题目描述
字符串有三种编辑操作:插入一个英文字符、删除一个英文字符或者替换一个英文字符。 给定两个字符串,编写一个函数判定它们是否只需要一次(或者零次)编辑。
示例 1:
输入: first = "pale" second = "ple" 输出: True
示例 2:
输入: first = "pales" second = "pal" 输出: False
来源:力扣(LeetCode) 链接:leetcode.cn/problems/on… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
二、思路分析
- 首先如果两个字符串直接相等,随便删除相同的一位肯定还相等,直接返回 true
- 然后我们找到两个字符串第一个不相等的字符,这时候有四种情况
- 2.1 从第一个字符串截取不相等的位置之后,和第二个字符串一样
- 2.2 从第二个字符串截取不相等的位置之后,和第一个字符串一样
- 2.3 第一个和第二个字符串同时截取不相等的位置之后,两个一样
- 2.4 经过由上三种情况还不一样
- 从 2.1 - 2.3 可以拼成一样的,返回 true, 2.4不能拼成,返回 false
三、代码实现
var oneEditAway = function (first, second) {
if (first === second) return true
for (let i = 0; i < first.length + second.length; i++) {
if (first[i] !== second[i]) {
return first.slice(0, i) + first.slice(i + 1) === second || second.slice(0, i) + second.slice(i + 1) === first || first.slice(0, i) + first.slice(i + 1) === second.slice(0, i) + second.slice(i + 1) || false
}
}
};
四、总结
以上就是本道题的所有内容了,本系列会持续更,欢迎点赞、关注、收藏,另外如有其他的问题,欢迎下方留言给我,我会第一时间回复你,感谢~