题目描述
字符串有三种编辑操作:插入一个英文字符、删除一个英文字符或者替换一个英文字符。 给定两个字符串,编写一个函数判定它们是否只需要一次(或者零次)编辑。
示例 1:
输入:
first = "pale"
second = "ple"
输出: True
示例 2:
输入:
first = "pales"
second = "pal"
输出: False
解题思路1:
这个题目没有太大难度, 主要是需要处理不同的情况.
- 直接判断2个字符串是否相等, 直接返回
- 判断2个字符串的长度差是否大于1, 直接返回
- 对于长度差在1以内的, 我们就需要进行遍历了.
- 两个字符串分别从头开始遍历, 如果当前2个字符相等, 那么就往下进行.
- 如果当前2个字符不相等, 首先记录一次不等count;
- 然后就需要考虑2个字符串的长度, 如果长度相同表示只存在替换字符的情况, 所以i,j同时+1, 继续遍历;
- 如果两个字符串长度不相等, 那么就存在长字符串删除和短字符串插入2种情况, 我们将遍历长字符串的idx+1, 用长字符串的下一个字符与短字符串的当前字符进行比较
- 当遍历完成后, 如果我们记录的不等count就是要使2个字符串相等需要操作的次数
示例代码
def oneEditAway(self, first: str, second: str) -> bool:
if first == second: return True
if abs(len(first) - len(second)) > 1: return False
l1, l2 = len(first), len(second)
i, j, count = 0, 0, 0
while i < l1 and j < l2:
if first[i] == second[j]:
i += 1
j += 1
else:
count += 1
if l1 > l2:
i += 1
elif l1 == l2:
i += 1
j += 1
else:
j += 1
return count < 2