欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

程序员面试金典(LeetCode)-面试题01.05(一次编辑)

程序员文章站 2024-03-04 11:04:17
...

一次编辑

题目描述
程序员面试金典(LeetCode)-面试题01.05(一次编辑)
算法思想
解该题,需分为三个步骤。
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