题目描述
题目分析
- 给定一个非空字符串,所以不用判空
- 如果单单是验证回文字符串,那就是非常简单了,难点就在于要判断最多删除一个字符后是否能成为回文字符串
解法分析
- 根据题意,如果字符串为
abca
,那么在删除c
后,仍然能构成回文字符串,则返回TRUE
- 那么对应的就是当头指针和尾指针指向的字符不等时,当去掉其中一个字符后,继续判断剩下的是否仍构成回文字符串,且最多去掉一个字符
- 那么前面已经判断过的,删掉一个字符后仍然是对称的,就不需要再回去判断了
- 所以只需要删除头指针或尾指针的一个字符后,继续判断是否为回文字符串即可
代码
class Solution {
public boolean validPalindrome(String s) {
char[] arr = s.toCharArray();
int len = arr.length;
for (int i = 0, j = len - 1; i < j; i++, j--) {
if (arr[i] != arr[j]) {
return isValidPalindrome(arr, i + 1, j) || isValidPalindrome(arr, i, j - 1);
}
}
return true;
}
public boolean isValidPalindrome(char[] arr, int i, int j) {
for (int k = i; k <= j; k++, j--) {
if (arr[k] != arr[j]) {
return false;
}
}
return true;
}
}