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

LeetCode 0680.验证回文串 II:两侧向中间,不同就试删

【LetMeFly】680.验证回文串 II:两侧向中间,不同就试删

力扣题目链接:https://leetcode.cn/problems/valid-palindrome-ii/

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

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

 

示例 1:

输入:s = "aba"
输出:true

示例 2:

输入:s = "abca"
输出:true
解释:你可以删除字符 'c' 。

示例 3:

输入:s = "abc"
输出:false

 

提示:

  • 1 <= s.length <= 105
  • s 由小写英文字母组成

解题方法:遍历

从两边到中间遍历字符串,如果当前两个字符不相同,就尝试删除其中的一个(并判断删除后中间剩下的字符串是否是回文字符串)。

如果删除一个或零个能成为回文字符串,则返回true

  • 时间复杂度 O ( l e n ( s ) ) O(len(s)) O(len(s))
  • 空间复杂度 O ( 1 ) O(1) O(1)

AC代码

C++
/*
 * @Author: LetMeFly
 * @Date: 2025-02-03 08:52:33
 * @LastEditors: LetMeFly.xyz
 * @LastEditTime: 2025-02-03 08:57:47
 */
class Solution {
private:
    bool isOk(string& s, int l, int r) {
        for (; l < r; l++, r--) {
            if (s[l] != s[r]) {
                return false;
            }
        }
        return true;
    }
public:
    bool validPalindrome(string& s) {
        for (int i = 0, j = s.size() - 1; i < j; i++, j--) {
            if (s[i] != s[j]) {
                return isOk(s, i, j - 1) || isOk(s, i + 1, j);
            }
        }
        return true;
    }
};
Python
'''
Author: LetMeFly
Date: 2025-02-03 08:57:31
LastEditors: LetMeFly.xyz
LastEditTime: 2025-02-03 08:59:26
'''
class Solution:
    def isOk(self, s: str, l: int, r: int) -> bool:
        while l < r:
            if s[l] != s[r]:
                return False
            l += 1
            r -= 1
        return True
    
    def validPalindrome(self, s: str) -> bool:
        l, r = 0, len(s) - 1
        while l < r:
            if s[l] != s[r]:
                return self.isOk(s, l, r - 1) or self.isOk(s, l + 1, r)
            l += 1
            r -= 1
        return True
Java
/*
 * @Author: LetMeFly
 * @Date: 2025-02-03 08:57:34
 * @LastEditors: LetMeFly.xyz
 * @LastEditTime: 2025-02-03 09:01:29
 */
class Solution {
    private boolean isOk(String s, int l, int r) {
        for (; l < r; l++, r--) {
            if (s.charAt(l) != s.charAt(r)) {
                return false;
            }
        }
        return true;
    }

    public boolean validPalindrome(String s) {
        for (int l = 0, r = s.length() - 1; l < r; l++, r--) {
            if (s.charAt(l) != s.charAt(r)) {
                return isOk(s, l, r - 1) || isOk(s, l + 1, r);
            }
        }
        return true;
    }
}
Go
/*
 * @Author: LetMeFly
 * @Date: 2025-02-03 08:57:46
 * @LastEditors: LetMeFly.xyz
 * @LastEditTime: 2025-02-03 09:05:54
 */
package main

func isOk_VP(s string, l, r int) bool {
    for ; l < r; l, r = l + 1, r - 1 {
        if s[l] != s[r] {
            return false
        }
    }
    return true
}

func validPalindrome(s string) bool {
    for l, r := 0, len(s) - 1; l < r; l, r = l + 1, r - 1 {
        if s[l] != s[r] {
            return isOk_VP(s, l, r - 1) || isOk_VP(s, l + 1, r)
        }
    }
    return true
}

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

Tisfy:https://letmefly.blog.csdn.net/article/details/145427404


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

相关文章:

  • Spring Cloud工程搭建
  • 2025 年 YOLO 十大未来应用场景
  • 6. 【Vue实战--孢子记账--Web 版开发】-- 主币种设置
  • 基于Spring Security 6的OAuth2 系列之八 - 授权服务器--Spring Authrization Server的基本原理
  • 99.24 金融难点通俗解释:MLF(中期借贷便利)vs LPR(贷款市场报价利率)
  • 20【变量的深度理解】
  • 订单状态监控实战:基于 SQL 的状态机分析与异常检测
  • 树莓派pico入坑笔记,睡眠
  • go-zero学习笔记(三)
  • 院校联合以项目驱动联合培养医工计算机AI人才路径探析
  • 【Linux网络编程】:守护进程,前台进程,后台进程
  • C++哈希表深度解析:从原理到实现,全面掌握高效键值对存储
  • Mac M1 Comfyui 使用MMAudio遇到的问题解决?
  • 【C++】B2122 单词翻转
  • 【C++篇】位图与布隆过滤器
  • 毫秒级响应的VoIP中的系统组合推荐
  • 【DeepSeek背后的技术】系列一:混合专家模型(MoE)
  • 从零开始实现一个双向循环链表:C语言实战
  • Java多线程——对象的组合
  • FPGA|例化生成的PLL功能IP核
  • 为什么在Rust中要用Struct和Enum组织数据?
  • MySQL锁类型(详解)
  • React+Cesium基础教程(003):加载3D建筑物和创建标签
  • 利用deepseek参与软件测试 基本架构如何 又该在什么环节接入deepseek
  • Pathformer3D: A 3D Scanpath Transformer for 360° Images(浅看)
  • Simula语言的物联网