程序员面试金典(LeetCode)-面试题01.05(一次编辑)
程序员文章站
2024-03-04 11:04:17
...
一次编辑
题目描述
算法思想
解该题,需分为三个步骤。
1、如果两个字符串的长度大小相差大于1,则不是一次编辑。(因为只能编辑1次或者0次)
2、如果两个字符串的长度大小相等,则判断是否有一个以外的多个字符不相同。(比如替换了多次)
3、如果两个字符串的长度相差1,则将长度更长的字符串中的不相同字符出去,利用其后面的字符串与另一字符串当前位置往后的字符串进行比较,如果相同则是一次编辑,如果不相同则不是。(不管是删除还是添加,都会有一个字符串长度比另一个字符串长)
因为这道题,原本自己实现的代码根据此思想比较复杂,性能不是很好,代码也不是很简洁,借鉴了一下别人的优秀代码,如下。
代码实现
class Solution(object):
def oneEditAway(self, first, second):
"""
:type first: str
:type second: str
:rtype: bool
"""
f, s = len(first), len(second)
#第一种情况
if abs(f-s) > 1:
return False
#二三种情况合在一起
l = min(f, s)
for j in range(l):
if (first[j] == second[j]):
continue
else:
if (first[j+1:] == second[j:]) or (first[j:] == second[j+1:]) or (first[j+1:] == second[j+1:]):
return True
else:
return False
return True
推荐阅读
-
程序员面试金典(LeetCode)-面试题01.05(一次编辑)
-
面试题01.05.一次编辑(Java)
-
Leetcode_程序员面试金典_面试题 01.03. URL化
-
【LeetCode程序员面试金典】面试题 01.07. Rotate Matrix LCCI
-
程序员面试金典 - 面试题 16.22. 兰顿蚂蚁(deque模拟)
-
程序员面试金典 - 面试题 17.06. 2出现的次数(找递推规律)
-
程序员面试金典 - 面试题 17.09. 第 k 个数(set优先队列/DP)
-
程序员面试金典面试题 01.04. 回文排列
-
程序员面试金典 - 面试题 04.09. 二叉搜索树序列(双端队列+回溯)**
-
面试题 01.05. 一次编辑