设原始字符串为s1
待考察字符串为s2
我们分四种情况:
1、len(s1) = len(s2) + 1
此时只可能是s1删除了一个字符变为s2
此时我们对两个字符串中前len(s2)个元素进行同时遍历
如果出现不同的,我们在s2的对应位置补s1中当前的字母,并记录
如果出现第二次不同的,返回false
如果出现了0次不同的,返回True
如果出现了1次不同的,再对s1和s2的末尾元素进行比较,相同返回True,不同返回False
2、len(s1) = len(s2) - 1
此时只可能是s1增加了一个字符变为s2
类似上述操作
3、len(s1) == len(s2)
此时只可能是s1替换了一个字符变为s2
则我们对两个字符串同时进行遍历
如果出现第一次差异 我们记录
如果出现第二次 返回false
如果出现的次数<=1 返回True
4、else
return false
class Solution:
def oneEditAway(self, first: str, second: str) -> bool:
len1 = len(first)
len2 = len(second)
if len1 == len2 + 1:
#可能是删除
if len1 == 1 and len2 == 0:
return True
havedeleted = False
second += ' '
for i in range(len2):
if first[i] != second[i]:
if havedeleted == False:
havedeleted = True
second = second[:i] + first[i] + second[i:-1]
else:
return False
if havedeleted == True:
return True if first[-1] == second[-1] else False
else:
return True
elif len1 == len2 - 1:
#可能是插入
if len1 == 0 and len2 == 1:
return True
havecharu = False
first += ' '
for i in range(len2):
if first[i] != second[i]:
if havecharu == False:
havecharu = True
first = first[:i] + second[i] + first[i:-1]
else:
return False
if havecharu == True:
return True if first[-1] == second[-1] else False
else:
return True
elif len1 == len2:
#可能是替换
havechange = False
for i in range(len1):
if first[i] != second[i]:
if havechange == False:
havechange = True
else:
return False
return True
else:
return False