2025年--Lc232-LCR 019. 验证回文串 II-Java版
1.题目

2.思路
在不删除字符的情况下,判断字符串是不是回文串的做法是使用双指针从字符串的两端开始同时向中间移动,直到两个指针相遇。如果移动过程中出现两个指针指向的字符不同,则字符串不满足正向和反向遍历的结果相同,因此不是回文串。如果移动过程中,两个指针指向的字符总是相同,则字符串是回文串。
用 left 和 right 表示两个指针。在允许删除最多一个字符的情况下,如果移动过程中出现 s[left]
=s[right],则需要删除 s[left] 或 s[right],才可能将 s 变成回文串。
如果删除 s[left],则剩余字符的下标范围是 [left+1,right];如果删除 s[right],则剩余字符的下标范围是 [left,right−1]。分别检查这两个下标范围中的子串是不是回文串,如果其中至少有一个子串是回文串,则可以通过删除一个字符将 s 变成回文串,否则不可以通过删除一个字符将 s 变成回文串。
特别地,如果移动过程中 s[left]=s[right] 总是成立,则 s 是回文串,不需要删除任何字符。
3.代码实现
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{if(huiwen(s,left+1,right)||huiwen(s,left,right-1)){return true;}return false; // 关键补充:两种删法都不行,直接返回 false}}return true;}public boolean huiwen(String s,int begin,int end){ int left=begin;int right=end;while(left<right){if(s.charAt(left)!=s.charAt(right)){return false;}left++;right--;}return true;}
}