python: 一次编辑

字符串有三种编辑操作:插入一个字符、删除一个字符或者替换一个字符。 给定两个字符串,编写一个函数判定它们是否只需要一次(或者零次)编辑。
示例 1:
输入: 
first = "pale"
second = "ple"
输出: True
示例 2:
输入: 
first = "pales"
second = "pal"
输出: False

一、双指针
分别从字符串两端向中间移动比较,直到两个字符不同。前后两个指针的距离小于1则符合条件。

class Solution:
    def oneEditAway(self, first: str, second: str) -> bool:
        if first == second:
            return True
        n = len(first)
        m = len(second)
        if abs(n-m)>1:
            return False
        i = 0
        n1 = n-1
        m1 = m-1
        while i<n and i<m and first[i]==second[i]:
            i += 1
        while n1>=0 and m1>=0 and first[n1]==second[m1]:
            n1 -= 1
            m1 -= 1
        return n1-i<1 and m1-i<1

二、迭代
保证第一个字符串比第二个长。找到两个字符不相同的位置,剩余部分如果长度一样则比较是否相同,如果长度不一样,则比较下一个字符和第二个字符串剩余部分是否相同。

class Solution:
    def oneEditAway(self, first: str, second: str) -> bool:
        n = len(first)
        m = len(second)
        if abs(n - m)>1:
            return False
        if m > n:
            return self.oneEditAway(second,first)
        for i in range(m):
            if first[i] != second[i]:
                if m == n:
                    return first[i+1:] == second[i+1:]
                else:
                    return first[i+1:] == second[i:]
        return True
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值