1.題目
字符串有三種編輯操作:插入一個(gè)英文字符、刪除一個(gè)英文字符或者替換一個(gè)英文字符。 給定兩個(gè)字符串,編寫一個(gè)函數(shù)判定它們是否只需要一次(或者零次)編輯浴鸿。
例子:oneEditAway("teacher","treacher")
2.思路
2.1 方法
雙指針模擬
2.2 過程
- 如果兩個(gè)字符串長(zhǎng)度相差大于1,則一次修改不能完成編輯弦追,故返回false.
- 由于題目中岳链,沒有明確,哪個(gè)字符串長(zhǎng)度大劲件,哪個(gè)字符串長(zhǎng)度小掸哑,故需要明確下長(zhǎng)度大的字符串。
- 雙指針循環(huán)處理零远,加上標(biāo)記符號(hào)count,代表修改次數(shù)苗分。
- 如果兩個(gè)字符串的字符都相等,則兩者都需要進(jìn)行后移操作牵辣。
- 如果兩個(gè)字符串不相等摔癣,再進(jìn)行判斷長(zhǎng)度是否相等,如果相等纬向,均后移择浊,count+1,如果不相等罢猪,長(zhǎng)的字符串索引+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
}
``` -