这道题用暴力法tle了,注意一下用two pointers先左右遍历原字符串,如果没有需要替换的,直接返回true. 如果遇到左右指针指的字符不相等的情况,则检查删掉左边这个或者删掉右边那个剩下的是不是回文就行。
class Solution {
public boolean validPalindrome(String s) {
if (s == null || s.length() == 0){
return true;
}
int l = 0;
int r = s.length() - 1;
while (l <= r){
if (s.charAt(l) != s.charAt(r)){
return isPalindrome(s, l+1, r) || isPalindrome(s, l, r - 1);
} else {
l++;
r--;
}
}
return true;
}
private boolean isPalindrome(String s, int l, int r){
char[] chars = s.toCharArray();
int i = l;
int j = r;
while (i <= j){
if (chars[i] != chars[j]){
return false;
}
i++;
j--;
}
return true;
}
}
网友评论