题目描述:
给定一个非空字符串 s
,最多删除一个字符。判断是否能成为回文字符串。
示例 1:
输入: "aba" 输出: True
示例 2:
输入: "abca" 输出: True 解释: 你可以删除c字符。
注意:
- 字符串只包含从 a-z 的小写字母。字符串的最大长度是50000。
解题思路:
相比于普通的回文字符串这里就多了一个限制条件就是可以删除一个字符,思路是这样的:
依然使用双指针方法比较头尾字符串,如果遇到不等的,不是直接返回而是尝试跳过这个字符比较后面的,并且记录下来已经出过错了,在出错就要返回false了,如果没出错就返回true嘛。
还有一种情况要考虑,就是人家本来就不需要删除字符的,也就是说本来就是个标准的回文,那么直接返回true就好啦。
代码实现(Java语言):
class Solution {
public boolean validPalindrome(String s) {
int i = 0,j = s.length() - 1;
char[] chars = s.toCharArray();
boolean firstTime = false;
while(i < j){
if(chars[i] != chars[j]){
if(judge(chars,i+1,j)){
return true;
}else if(judge(chars,i,j-1)){
return true;
}else
return false;
}else{
i++;
j--;
}
}
return true;
}
public boolean judge(char[] chars,int start,int end){
while(start < end){
if(chars[start] != chars[end])
return false;
start++;
end--;
}
return true;
}
}