LeetCode 680. 验证回文串 II Java 完整题解

m0_59305477 2026-04-20 22:44:03

680. 验证回文串 II Java 题解 | 双指针贪心 + 详细注释 + 思路详解

给你一个字符串 s最多可以从中删除一个字符。请你判断 s 是否能成为回文字符串:如果能,返回 true;否则返回 false

题目示例

表格

输入输出说明
"aba"true本身就是回文,无需删除
"abca"true删除字符c即可变成回文
"abc"false删除任意一个都不是回文

数据范围:字符串长度 1≤n≤105,必须用 O (n) 时间复杂度解法


解题核心思路(双指针贪心)

本题是经典双指针进阶回文问题,普通回文串是左右指针相等就移动,本题多了一个「最多删 1 个字符」的条件:

  1. 定义左指针left从头部开始,右指针right从尾部开始
  2. s[left] == s[right]:左右指针同时向内移动
  3. s[left] != s[right]:出现不匹配,此时有两种贪心选择
    • 删除左指针字符:判断子串 [left+1, right] 是否是回文
    • 删除右指针字符:判断子串 [left, right-1] 是否是回文
  4. 两种选择任意一个是回文,就返回true;都不是返回false
  5. 封装一个单独的辅助函数,判断指定区间的子串是否是严格回文串

优势:一次遍历 + 最多两次子串检查,整体时间复杂度 O (n),完全满足 1e5 长度数据要求


完整 Java 可提交代码(带详细注释)

java

运行

class Solution {
    public boolean validPalindrome(String s) {
        int left = 0;
        int right = s.length() - 1;
        // 双指针遍历整个字符串
        while (left < right) {
            // 左右字符匹配,继续向内收缩
            if (s.charAt(left) == s.charAt(right)) {
                left++;
                right--;
            } else {
                // 出现不匹配:两种选择,删左 或 删右,任意满足回文即可
                return checkPalindrome(s, left + 1, right) 
                        || checkPalindrome(s, left, right - 1);
            }
        }
        // 循环结束说明本身就是回文,无需删除
        return true;
    }

    /**
     * 辅助函数:判断字符串s [l,r]区间内是否是严格回文串(不能删除字符)
     */
    private boolean checkPalindrome(String s, int l, int r) {
        while (l < r) {
            if (s.charAt(l) != s.charAt(r)) {
                return false;
            }
            l++;
            r--;
        }
        return true;
    }
}

代码复杂度分析

  • 时间复杂度:O(n),原字符串一次遍历,最多两次子串回文检查,整体线性时间
  • 空间复杂度:O(1),仅使用常数额外变量,原地双指针,无额外数组开销

测试用例验证

java

运行

validPalindrome("aba")   // true 本身回文
validPalindrome("abca")  // true 删除c
validPalindrome("abc")   // false 无法满足
validPalindrome("a")     // true 单个字符
validPalindrome("cuucu") // true 删除中间u

本题考点总结

本题是双指针算法入门经典题,区别于基础回文串判断,重点考察:

  1. 双指针左右相向遍历的基础写法
  2. 贪心思想:遇到不匹配时的两种分支选择
  3. 代码模块化:抽取辅助函数,逻辑清晰易读
  4. 线性时间复杂度优化,应对大数据量

非常适合力扣新手入门双指针、字符串算法,也是面试高频手写简单题。

...全文
41 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

151

社区成员

发帖
与我相关
我的任务
社区描述
这里专为新疆政法学院的探索者而建,英雄不问出处。起跑线是起点,热忱与坚持为加速器,无论bug缠身的项目,还是攻克的算法顿悟,每滴汗水皆被珍藏。执炬前行,终将照亮彼此峰顶,我们携手同行。
课程设计笔记经验分享 高校 新疆·图木舒克市
社区管理员
  • 雲中203
  • SHAO060706
  • 三叶草.
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

英雄不问出处

试试用AI创作助手写篇文章吧