【LeetCode】LCR 019. 验证回文串 II

题目

思路(双指针 + 一次容错)

用两个指针 lr 从两端向中间走:

  • 如果 s[l] == s[r],继续收缩。
  • 第一次遇到不相等时,说明必须"删掉一个字符"来尝试补救:
    • 要么删左边字符:判断 s[l+1..r] 是否为回文
    • 要么删右边字符:判断 s[l..r-1] 是否为回文
  • 两种只要有一种成立,就返回 true;都不成立返回 false
  • 如果从头到尾都没遇到不相等,原串就是回文,返回 true

复杂度

  • 时间复杂度:O(n)(最多做两次区间回文检查)
  • 空间复杂度:O(1)

代码(Java)

java 复制代码
class Solution {
    private boolean isPal(String s, int l, int r) {
        while (l < r) {
            if (s.charAt(l) != s.charAt(r)) return false;
        }
        return true;
    }

    public boolean validPalindrome(String s) {
        int l = 0, r = s.length() - 1;
        while (l < r) {
            if (s.charAt(l) == s.charAt(r)) {
                l++;
                r--;
            } else {
                return isPal(s, l + 1, r) || isPal(s, l, r - 1);
            }
        }
        return true;
    }
}
相关推荐
猎嘤一号14 分钟前
博弈论(Game Theory)的理论、算法与工程
人工智能·算法·安全·博弈论
马拉AI30 分钟前
腾讯开源 Agent 记忆系统,AI“换对话就忘”的问题有了新解法(附安装使用教程)
人工智能·算法·开源·科研
地平线开发者2 小时前
征程6工具链模型X86推理方式说明
算法
地平线开发者2 小时前
【征程6】校准量化中HistogramObserver解析
算法
OuO-23 小时前
笔试强训 Day 34:ISBN 号码、kotori 和迷宫、矩阵最长递增路径
java·算法·矩阵
程序喵大人4 小时前
【C++进阶】STL算法与函数对象 - 04 find、count和any_of把查询写成意图
开发语言·c++·算法
豆沙沙包?4 小时前
c++中引用(P7-P11)
java·c++·算法
不会代码的小猴4 小时前
标准模板库(STL)
开发语言·c++·笔记·算法
ZhouDevin4 小时前
算法论文/高效微调4——DoRA:权重分解的低秩适配方法
算法
evans在进步5 小时前
LeetCode 200:岛屿数量——Java DFS 染色法详解
java·leetcode·深度优先