1. 题目原址
https://leetcode.com/problems/valid-palindrome-ii/
2. 题目描述
3. 题目大意
给一个非空的字符串,你可以删除最多一个字符,判断之后这个字符串是否是回文串。
4. 解题思路
使用递归的方式解题
- 首先我们将给定的字符串,字符串左边的下标,右边的下标,当前已经删除了多少元素和允许删除多少个元素 作为参数放到方法中。
- 在方法里,我们递归的出口是: 已经删除的元素是否大于允许删除的元素个数,如果大于,则直接返回false,否则继续进行下面的操作
- 如果左边的元素等于右边的元素,就继续两个指针往中间移动,如果不等,则需要删除这个元素,那么就将已经删除的元素个数递增,然后递归判断。
5. AC代码
class Solution {
public boolean validPalindrome(String s) {
if(s == null || s.length() == 0)
return true;
return isValid(s,0,s.length() - 1,0,1);
}
private boolean isValid(String s, int left, int right, int delCount, int N) {
if(delCount > N)
return false;
while (left < right) {
if (s.charAt(left) == s.charAt(right)) {
left++;
right--;
} else {
delCount++;
return isValid(s, left + 1, right, delCount, N)
|| isValid(s, left, right - 1, delCount, N);
}
}
return true;
}
}
6. 相似题型
【1】 234. Palindrome Linked List 题目原址 : https://leetcode.com/problems/palindrome-linked-list/
【2】 680. Valid Palindrome II 题目原址: https://leetcode.com/problems/valid-palindrome-ii/