LeetCode每日一题——面试题 01.05. 一次编辑

简介: 字符串有三种编辑操作:插入一个字符、删除一个字符或者替换一个字符。 给定两个字符串,编写一个函数判定它们是否只需要一次(或者零次)编辑。

题目

字符串有三种编辑操作:插入一个字符、删除一个字符或者替换一个字符。 给定两个字符串,编写一个函数判定它们是否只需要一次(或者零次)编辑。

示例 1:

输入: first = “pale” second = “ple”

输出: True

示例 2:

输入: first = “pales” second = “pal”

输出: False

思路

1.首先比较给定两字符串长度,如果相差大于1则直接返回False

2.设置一个计数器res=0表示操作的次数,并且在first和second两个字符串中各设置一个指针,比较两字符串两指针位置是否相等:

若相等则两个指针同时+1向右移动

不等分为三种情况:

分别是first由second添加一次、first由second减少一次、first由second替换一次

前两种情况对应长度较长的字符串的指针+1向右移动,另一字符串的指针不动,计数器res+1,表示跳过长度较长字符串的本字符,继续比较下一字符。

最后一种情况对应两指针同时+1向右移动,计数器res+1,同时比较下一字符。

3.循环结束,判断计数器res是否等于0或1:0表示给定的两字符串都为空字符串、有一个字符串为空字符串另一字符串长度为1、两字符串长度都为1这几种特殊情况,1则表示给定字符串长度为两位以上只进行一次操作

题解

class Solution:
    def oneEditAway(self, first: str, second: str) -> bool:
      #  判断相差是否大于2
        if abs(len(first) - len(second)) > 1:
            return False
        l, r, res = 0, 0, 0
        # 循环
        while l < len(first) and r < len(second):
          # 二者相等
            if first[l] == second[r]:
                l += 1
                r += 1
            else:
              # first长度大于second
                if len(first) > len(second):
                    l += 1
                    res += 1
                # second长度大于first
                elif len(first) < len(second):
                    r += 1
                    res += 1
                # 二者长度相等
                else:
                    l += 1
                    r += 1
                    res += 1
        #  判断res是否符合要求
        return True if res == 1 or res == 0 else False


目录
相关文章
|
19天前
|
Java
【LeetCode力扣】面试题 17.14. 最小K个数(top-k问题)
【LeetCode力扣】面试题 17.14. 最小K个数(top-k问题)
19 1
|
5天前
|
存储 算法 C语言
从C语言到C++_39(C++笔试面试题)next_permutation刷力扣
从C语言到C++_39(C++笔试面试题)next_permutation刷力扣
10 5
|
19天前
|
算法
【刷题】 leetcode 面试题 08.05.递归乘法
递归算法是一种在计算机科学和数学中广泛应用的解决问题的方法,其基本思想是利用问题的自我相似性,即将一个大问题分解为一个或多个相同或相似的小问题来解决。递归算法的核心在于函数(或过程)能够直接或间接地调用自身来求解问题的不同部分,直到达到基本情况(也称为基础案例或终止条件),这时可以直接得出答案而不必再进行递归调用。
30 4
【刷题】 leetcode 面试题 08.05.递归乘法
|
19天前
|
存储 算法 安全
【刷题】 leetcode 面试题 01.06 字符串压缩
来看效果: 非常好!!!过啦!!!
32 5
【刷题】 leetcode 面试题 01.06 字符串压缩
|
19天前
|
C++ 索引
【力扣经典面试题】14. 最长公共前缀
【力扣经典面试题】14. 最长公共前缀
|
19天前
|
C++
【力扣经典面试题】58. 最后一个单词的长度
【力扣经典面试题】58. 最后一个单词的长度
|
19天前
|
算法 Java
【力扣经典面试题】12. 整数转罗马数字
【力扣经典面试题】12. 整数转罗马数字
|
7天前
|
索引
【力扣刷题】两数求和、移动零、相交链表、反转链表
【力扣刷题】两数求和、移动零、相交链表、反转链表
15 2
【力扣刷题】两数求和、移动零、相交链表、反转链表
|
6天前
|
算法
"刷题记录:哈希表+双指针 | leetcode-2465. 不同的平均值数目 "
该文段是一篇关于编程题目的解答,主要讨论如何找到数组中所有不同平均值的个数。作者首先使用排序和哈希集来解决,将数组转为列表排序后,通过双指针计算平均值并存入哈希集以去重。然后,作者发现可以优化方案,通过双指针在排序后的数组中直接计算两数之和,用哈希集记录不重复的和,从而避免实际计算平均值,提高了算法效率。最终代码展示了这两种方法。
15 0
|
7天前
|
索引
【力扣刷题】删除链表的倒数第 N 个结点、两两交换链表中的节点、随机链表的复制
【力扣刷题】删除链表的倒数第 N 个结点、两两交换链表中的节点、随机链表的复制
13 0