验证回文字符串Ⅱ
思路
回文字符串的验证仍然考虑使用双指针的方法,在这里的难点就是当匹配到不一样的字符串时如何判定删除某一个字符后回文仍成立,这里就需要设定一个判断函数,例如,验证abbca时,左边指针i向右遍历,右边指针j向左遍历,b不等于c时,可以验证(i+1,j)或者(i,j-1)的字符只要任意一个满足回文条件即可继续判断回文。
public boolean validPalindrome(String s) {
//思路,从两边开始判断,如果字符不相等,就考虑(i+1,j) (i,j-1)的子串是否有满足条件的
int i=0,j=s.length()-1;
while(i<j){
if(s.charAt(i)!=s.charAt(j)){
return isValid(s,i+1,j)||isValid(s,i,j-1);
}
i++;
j--;
}
return true;
}
public boolean isValid(String str,int start,int end){
while(start<end){
if(str.charAt(start)!=str.charAt(end)){
return false;
}
start++;
end--;
}
return true;
}
验证回文字符串
思路
顺便回顾验证回文字符串的前身题,仍然是双指针判断,因为有大小写问题,可以将字符转化为小写或大写,然后可以使用Character.isLetterOrDigit来判断是否为字符或字母。
public boolean isPalindrome(String s) {
if (s.length() == 0)
return true;
String str = s.toLowerCase();
int i = 0;
int j = str.length() - 1;
while(i<j){
if(!Character.isLetterOrDigit(str.charAt(i))){
i++;
continue;
}
else if(!Character.isLetterOrDigit(str.charAt(j))){
j--;
continue;
}
else if(str.charAt(i)!=str.charAt(j)){
return false;
}else{
i++;
j--;
}
}
return true;
}