Leetcode680:验证回文串 II

news/2025/2/16 4:04:18

题目描述:

给你一个字符串 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.niftyadmin.cn/n/5841904.html

相关文章

FPGA学习篇——开篇之作

今天正式开始学FPGA啦&#xff0c;接下来将会编写FPGA学习篇来记录自己学习FPGA 的过程&#xff01; 今天是大年初六&#xff0c;简单学一下FPGA的相关概念叭叭叭&#xff01; 一&#xff1a;数字系统设计流程 一个数字系统的设计分为前端设计和后端设计。在我看来&#xff0…

大语言模型的个性化综述 ——《Personalization of Large Language Models: A Survey》

摘要&#xff1a; 本文深入解读了论文“Personalization of Large Language Models: A Survey”&#xff0c;对大语言模型&#xff08;LLMs&#xff09;的个性化领域进行了全面剖析。通过详细阐述个性化的基础概念、分类体系、技术方法、评估指标以及应用实践&#xff0c;揭示了…

毫秒级响应的VoIP中的系统组合推荐

在高并发、低延迟、毫秒级响应的 VoIP 场景中&#xff0c;选择合适的操作系统组合至关重要。以下是针对 Ubuntu linux-lowlatency、CentOS Stream kernel-rt 和 Debian 自定义 PREEMPT_RT 的详细对比及推荐&#xff1a; 1. 系统组合对比 特性Ubuntu linux-lowlatencyCentO…

kamailio源文件modules.lst的内容解释

在执行make cfg 后&#xff0c;在kamailio/src目录下有一个文件modules.lst&#xff0c;内容如下&#xff1a; # this file is autogenerated by make modules-cfg# the list of sub-directories with modules modules_dirs:modules# the list of module groups to compile cf…

C++ 字面量深度解析:从基础到实战进阶

在 C 开发中&#xff0c;字面量&#xff08;Literal&#xff09;不仅是基础语法的一部分&#xff0c;更是提升代码可读性、安全性和性能的关键工具。本文将深入探讨 C 字面量的高级特性、最新标准支持&#xff08;C11/14/17/20&#xff09;以及实际开发中的应用技巧&#xff0c…

CH340G上传程序到ESP8266-01(S)模块

文章目录 概要ESP8266模块外形尺寸模块原理图模块引脚功能 CH340G模块外形及其引脚模块引脚功能USB TO TTL引脚 程序上传接线Arduino IDE 安装ESP8266开发板Arduino IDE 开发板上传失败上传成功 正常工作 概要 使用USB TO TTL&#xff08;CH340G&#xff09;将Arduino将程序上传…

【Redis_2】短信登录

一、基于Session实现登录 RegexUtils:是定义的关于一些格式的正则表达式的工具箱 package com.hmdp.utils;import cn.hutool.core.util.StrUtil;public class RegexUtils {/*** 是否是无效手机格式* param phone 要校验的手机号* return true:符合&#xff0c;false&#xff…

Kotlin 使用 Springboot 反射执行方法并自动传参

在使用反射的时候&#xff0c;执行方法的时候在想如果Springboot 能对需要执行的反射方法的参数自动注入就好了。所以就有了下文。 知识点 获取上下文通过上下文获取 Bean通过上下文创建一个对象&#xff0c;该对象所需的参数由 Springboot 自己注入 创建参数 因为需要对反…