1.题目
字符串有三种编辑操作:插入一个英文字符、删除一个英文字符或者替换一个英文字符。 给定两个字符串,编写一个函数判定它们是否只需要一次(或者零次)编辑。
例子:oneEditAway("teacher","treacher")
2.思路
2.1 方法
双指针模拟
2.2 过程
- 如果两个字符串长度相差大于1,则一次修改不能完成编辑,故返回false.
- 由于题目中,没有明确,哪个字符串长度大,哪个字符串长度小,故需要明确下长度大的字符串。
- 双指针循环处理,加上标记符号count,代表修改次数。
- 如果两个字符串的字符都相等,则两者都需要进行后移操作。
- 如果两个字符串不相等,再进行判断长度是否相等,如果相等,均后移,count+1,如果不相等,长的字符串索引+1,count+1
- 最后返回判断 count<=1
3.代码
def oneEditAway(first: String, second: String): Boolean = {
val firstLen: Int = first.length
val secondLen: Int = second.length
if(Math.abs(firstLen-secondLen)>1) return false
if(firstLen<secondLen) return oneEditAway(second,first)
var index1 = 0
var index2 = 0
var count = 0
while (index1<firstLen&&index2<secondLen&&count<=1){
val firstChar: Char = first(index1)
val secondChar: Char = second(index2)
if(firstChar==secondChar){
index1=index1+1
index2=index2+1
}
else {
if(firstLen==secondLen){
index1=index1+1
index2=index2+1
count=count+1
}
else {
index1=index1+1
count=count+1
}
}
}
return count<=1
}
``` -