题目
给定一个非空字符串 s,请判断如果 最多 从字符串中删除一个字符能否得到一个回文字符串。
示例
输入: s = “aba”
输出: true
输入: s = “abca”
输出: true
解释: 可以删除 “c” 字符 或者 “b” 字符
输入: s = “abc”
输出: false
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/RQku0D
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
方法1:双指针
如果不相等,则分两种情况:删除左边的元素,或者右边的元素,再判断各自是否回文,满足一种即可。
Java实现
class Solution {
public boolean validPalindrome(String s) {
int n = s.length();
int l = 0, r = n - 1;
while (l < r) {
if (s.charAt(l) != s.charAt(r)) {
return isPalindrome(s, l + 1, r) || isPalindrome(s, l, r - 1);
}
l++;
r--;
}
return true;
}
public boolean isPalindrome(String s, int l, int r) {
while (l < r) {
if (s.charAt(l) != s.charAt(r)) return false;
l++;
r--;
}
return true;
}
}