当前位置: 首页 > article >正文

Leetcode680:验证回文串 II

题目描述:

给你一个字符串 s最多 可以从中删除一个字符。

请你判断 s 是否能成为回文字符串:如果能,返回 true ;否则,返回 false 。

代码思路:

  1. 定义辅助函数 is_palindrome

    • 这个函数用于检查一个字符串的子串是否是回文。
    • 它接受三个参数:子串 sub_s,子串的左边界 left,和子串的右边界 right
    • 使用一个 while 循环,当左边界小于右边界时,比较左右边界的字符是否相等。
    • 如果字符不相等,返回 False,表示子串不是回文。
    • 如果字符相等,则移动左右边界向内收缩,继续比较。
    • 如果循环结束都没有返回 False,则说明子串是回文,返回 True
  2. 主函数 validPalindrome

    • 这个函数接受一个字符串 s 作为参数,用于判断该字符串是否是有效的回文字符串。
    • 初始化两个指针 left 和 right 分别指向字符串的开头和结尾。
    • 使用一个 while 循环,当左指针小于右指针时,执行以下步骤:
      • 比较左右指针指向的字符是否相等。
      • 如果字符相等,则移动左右指针向内收缩,继续比较。
      • 如果字符不相等,说明当前字符串不是直接回文,但可能是通过删除一个字符后成为回文。
      • 调用 is_palindrome 函数检查两种情况:
        • 删除左指针指向的字符后,剩余的子串是否是回文。
        • 删除右指针指向的字符后,剩余的子串是否是回文。
      • 如果上述两种情况中任何一种返回 True,则说明原字符串是有效的回文字符串(即可以通过删除最多一个字符成为回文),返回 True
      • 如果循环结束都没有发现字符不相等的情况,说明字符串本身就是回文,返回 True

代码实现:

class Solution:
    def validPalindrome(self, s: str) -> bool:
        def is_palindrome(sub_s, left, right):
            while left < right:
                if sub_s[left] != sub_s[right]:
                    return False
                left += 1
                right -= 1
            return True

        left, right = 0, len(s) - 1
        while left < right:
            if s[left] != s[right]:
                return is_palindrome(s, left + 1, right) or is_palindrome(s, left, right - 1)
            left += 1
            right -= 1
        return True

 

 


http://www.kler.cn/a/531948.html

相关文章:

  • 数据思维错题知识点整理(复习)
  • python 小游戏:扫雷
  • 【R语言】R语言安装包的相关操作
  • Maven的三种项目打包方式——pom,jar,war的区别
  • 路径规划之启发式算法之二十九:鸽群算法(Pigeon-inspired Optimization, PIO)
  • 【汽车电子软件架构】AutoSAR从放弃到入门专栏导读
  • 物业管理平台系统为社区管理带来数字化转型与服务创新新机遇
  • 高阶开发基础——快速入门C++并发编程5 信号量的使用
  • 自定义数据集 使用paddlepaddle框架实现逻辑回归
  • 农历2025开始 笔记
  • 基于STM32的智能健康监测手环
  • Sqoop导入MySQL中含有回车换行符的数据
  • 【Deep Seek本地化部署】修改模型保存位置
  • (done) MIT6.S081 2023 学习笔记 (Day7: LAB6 Multithreading)
  • 【C++】继承(下)
  • 吴恩达深度学习——卷积神经网络基础
  • GESP2023年12月认证C++六级( 第三部分编程题(1)闯关游戏)
  • PyQt4学习笔记1】使用QWidget创建窗口
  • Kubernetes服务网格实战:从理论到落地
  • 经典本地影音播放器MPC-BE.
  • 动手学深度学习-3.1线性回归 问题汇总
  • 指导初学者使用Anaconda运行GitHub上One - DM项目的步骤
  • Python玄学
  • 【Jax和Flax介绍】
  • redis实际开发应用简单实现
  • c语言练习题【数据类型、递归、双向链表快速排序】