题目如下:
给定一个非空字符串 s
,请判断如果 最多 从字符串中删除一个字符能否得到一个回文字符串。
首先,判断一个字符串是否为回文(正反两个方向依次读取的内容是一样的),有两种情况:
- 中间以一个元素为中心的回文串
- 中间是两个元素为中心的回文串
起初定义两个指针 left指向字符串开头,rught 指向字符串结尾,如果 left 与 right 指向的字符相等,那么 left 加1 right 减 1,如果 不相等,此时根据题意应该删除一个字符后继续判断,删除有两种情况,删左边或者右边,移除后继续判断剩下的子串是否满足回文串要求。
代码具体实现如下:
class Solution {
public boolean validPalindrome(String s) {
int low = 0, high = s.length() - 1;
while (low < high) {
if (s.charAt(low) == s.charAt(high)) {
low++;
high--;
} else {
return isPalindrome(s, low + 1, high) || isPalindrome(s, low, high - 1);
}
}
return true;
}
private boolean isPalindrome(String s, int low, int high) {
while (low < high) {
if (s.charAt(low) != s.charAt(high)) {
return false;
}
low++;
high--;
}
return true;
}