1.题目
字符串有三种编辑操作:插入一个字符、删除一个字符或者替换一个字符。 给定两个字符串,编写一个函数判定它们是否只需要一次(或者零次)编辑。
2.示例
示例 1:
输入: first = “pale” second = “ple”
输出: True
示例 2:
输入: first = “pales” second = “pal”
输出: False
3.思路
for循环依次对比,每次遇到相同的位置上字符不同,就进行处理,如果两字符串长度不同则删除长字符串的当前元素,同时比较删除后的下一个字符是否和另一字符串的对应位置的字符相同。不同则返回false,相同则计数+1。最后若计数大于1则返回false,小于等于1则返回true。
4.代码
func oneEditAway(first string, second string) bool {
times := 0
//为避免遍历数组时溢出,选择遍历较短的字符串
if len(first)>len(second) {
temp := first
first = second
second = temp
}
//如果长度差距就大于一就不可能通过一次编辑完成
if len(first)-len(second)>1 || len(second)-len(first)>1 {
return false
}else {
for i, _ := range first{
if first[i]!=second[i] {
if len(first)>len(second) {
first = first[0:i]+first[i+1:]
if i<len(second)-1 {
if first[i] != second[i] {
return false
}
}
}
if len(second)>len(first) {
second = second[0:i]+second[i+1:]
if i<len(second) {
if first[i] != second[i] {
return false
}
}
}
times++
}
}
}
if times>1 {
return false
}
return true
}