# if大法
class Solution:
def oneEditAway(self, first: str, second: str) -> bool:
n = len(first)
m = len(second)
if n < m:
return self.oneEditAway(second, first)
if (n - m) > 1:
return False
for i, (x, y) in enumerate(zip(first, second)):
if x != y:
if n == m:
return first[i + 1:] == second[i + 1:]
else:
return first[i + 1:] == second[i:]
return True
方法二:if大法优化版
思路:基本思路一致,但是优化了对最长字符串的锁定。循环判断的时候多加一种情况即可。
# if大法优化版
class Solution:
def oneEditAway(self, first: str, second: str) -> bool:
n, m = len(first), len(second)
if abs(n - m) > 1:
return False
for i in range(min(n, m)):
if first[i] != second[i]:
return first[i + 1:] == second[i + 1:] or \
first[i + 1:] == second[i:] or \
first[i:] == second[i + 1:]
return True
# 双指针
class Solution:
def oneEditAway(self, first: str, second: str) -> bool:
n, m = len(first), len(second)
if abs(n - m) > 1:
return False
if n < m:
return self.oneEditAway(second, first)
i, j, diff = 0, 0, 0
while i < n and j < m:
if first[i] != second[j]:
diff += 1
if diff >= 2:
return False
if n > m:
j -= 1
i += 1
j += 1
return True