面试题 01.05. 一次编辑
难度中等142收藏分享切换为英文接收动态反馈
字符串有三种编辑 *** 作:插入一个字符、删除一个字符或者替换一个字符。 给定两个字符串,编写一个函数判定它们是否只需要一次(或者零次)编辑。
示例 1:
输入: first = "pale" second = "ple" 输出: True
示例 2:
输入: first = "pales" second = "pal" 输出: False
通过次数47,199提交次数142,718
解题思路:如果两个字符串符合要求,那么他的前缀和 and 后缀和应该是相等的。
Python代码:
class Solution:
def oneEditAway(self, first: str, second: str) -> bool:
p1 , p2 , q1 , q2 = 0 , 0 , len(first)-1 , len(second)-1
while p1<=q1 and p2<=q2:
if first[p1]==second[p2]:
p1 += 1
p2 += 1
continue
elif first[q1]==second[q2]:
q1 -= 1
q2 -= 1
else: break
return q1-p1 + q2-p2<=0 and abs(p1-p2)<=1 and abs(q1-q2)<=1
C++代码:
class Solution {
public:
bool oneEditAway(string first, string second) {
int p1 = 0 , p2 = 0;
int q1 = first.size()-1 , q2 = second.size()-1;
while (p1<=q1 && p2<=q2)
{
if (first[p1]==second[p2]){
p1++;
p2++;
continue;
}
else if (first[q1] == second[q2]){
q1--;
q2--;
}
else break;
}
return q1-p1 + q2-p2 <=0 && abs(p2-p1)<=1 && abs(q2-q1)<=1;
}
};
python的快速解法:
class Solution:
def oneEditAway(self, first: str, second: str) -> bool:
m , n = len(first) , len(second)
if m-n>1:return False
if m
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)