1、题目
给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。
2、思路
1 双指针从头start和尾end分别向中间遍历,相等start++ end-- 2 遇到不相等的,分别start+1,end 和start,end-1传入判断回文串函数,只要有一个是就return true,否则return false
【注意】:这里与其纠结不相等时该如何处理,不如直接写个判断回文串函数处理一下。
3、代码
class Solution {
public boolean validPalindrome(String s) {
int len = s.length();
int start = 0, end = len - 1;
boolean flag = false;
while (start < end) {
if (s.charAt(start) == s.charAt(end)) {
start++;
end--;
} else {
boolean flag1 = isPalindrome(s.substring(start + 1, end + 1));
boolean flag2 = isPalindrome(s.substring(start, end));
if (flag1 || flag2) return true;
else return false;
}
}
return true;
}
public boolean isPalindrome(String s) {
int len = s.length();
int start = 0, end = len - 1;
while (start < end) {
if (s.charAt(start) == s.charAt(end)) {
start++;
end--;
} else return false;
}
return true;
}
}