回文字符串很容易理解,这道题目是加强版的回文验证。原题目地址
给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。
示例 1:
输入: "aba"
输出: True
示例 2:
输入: "abca"
输出: True
解释: 你可以删除c字符。
这个递归来求解
public boolean validPalindrome(String s) {
if(null == s) return false;
int len = s.length();
if(len < 2) return true;
int i = 0;
int j = len - 1;
while(i < j){
if(s.charAt(i) != s.charAt(j)){
// 如果两头的字符不一样,那删除其中一个,剩下的部分是回文字符串,符合题目要求
return palindrome(s, i+1,j) || palindrome(s, i, j-1);
}
i++;
j--;
}
// 走到这里,说明s本身就是回文字符串
return true;
}
// 判断一个字符串,是不是回文字符串
private boolean palindrome(String s, int i, int j){
while(i <= j){
if(s.charAt(i) != s.charAt(j)){
return false;
}
i++;
j--;
}
return true;
}
这道题目本身不难,用递归就可以实现。关键点是想到这个:如果首尾不相同,去掉其中一个,得到回文字符串,即满足题目要求。