1. 题目描述
字符串有三种编辑操作:插入一个字符、删除一个字符或者替换一个字符。 给定两个字符串,编写一个函数判定它们是否只需要一次(或者零次)编辑。
2. 示例
示例 1:
输入:
first = "pale"
second = "ple"
输出: True
示例 2:
输入:
first = "pales"
second = "pal"
输出: False
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/one-away-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
3. 思路
可以转变思路,看两字符串相差字符个数
分情况如下:
- 两字符串长度差值大于等于
2
,题目要求1次或者0次修改,长度差2的时候不可能满足条件,返回false
- 两字符串长度差值为
1
时,对比两字符串的各位置的字符,根据相差字符串的个数进行判断,如果相差字符数量为1
,则通过加减字符串都可以满足要求返回true
。不满足返回false
。 - 两字符串长度差值为
0
时,相差字符数量为1或0
时满足条件返回true
,其余情况返回false
4. 遇上的问题
问题描述:字符串差值为1
时,遍历循环到短字符串尾部时,循环跳出条件没确定好。导致错误跳出循环。
解决方案:原来写的是first
字符串的索引等于second
字符串长度时跳出。后来改为second
字符串的索引等于second
字符串长度时跳出。
5. 具体实现代码
自己写的代码
func oneEditAway(first string, second string) bool {
//两字符相等的情况
if first == second{
return true
}
//两字符差值>=2的情况
if len(first) - len(second) >= 2 || len(first) - len(second) <= -2{
return false
}
//两字符差值==1的情况
if len(first) - len(second) == 1 || len(first) - len(second)== -1{
if len(first) - len(second) == -1{
temp := first
first = second
second = temp
}
diffCount := 0
secondNum := 0
for i := 0 ; i <len(first) ; i++{
if diffCount > 1{
return false
}
//循环跳出条件
if secondNum == len(second){
diffCount++
break
}
if first[i] != second[secondNum]{
diffCount++
secondNum--
}
secondNum++
}
if diffCount != 1 {
return false
}
return true
}
//字符串长度相等的情况。
diffCount := 0
for i := 0 ; i <len(first) ; i++{
if first[i] != second[i]{
diffCount++
}
}
if diffCount == 1{
return true
}
return false
}
6. 官方题解
func oneEditAway(first, second string) bool {
m, n := len(first), len(second)
if m < n {
return oneEditAway(second, first)
}
if m-n > 1 {
return false
}
for i, ch := range second {
if first[i] != byte(ch) {
if m == n {
return first[i+1:] == second[i+1:]
}
return first[i+1:] == second[i:]
}
}
return true
}
作者:LeetCode-Solution
链接:https://leetcode.cn/problems/one-away-lcci/solution/yi-ci-bian-ji-by-leetcode-solution-2xkr/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
阿这,看了官方题解,更加便捷,不需要每个字符的去比较,字符串差值为1
时可以用两字符串当前位置后面的字符串直接做比较,喵喵喵喵喵喵。
7 题目来源
当比较字符串时,如果是只允许一个字符不同,在发现不同字符后,可以直接比较后续字符串!! ------swrici