题目链接:https://leetcode-cn.com/problems/valid-palindrome/description/
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: "A man, a plan, a canal: Panama"
输出: true
示例 2:
输入: "race a car"
输出: false
思路:两个指针前后扫描即可 主要边界 注意细节
class Solution {
public boolean isCharOrNum(char c){
if (Character.isLowerCase(c)
|| Character.isUpperCase(c)
|| Character.isDigit(c)){
return true;
}
return false;
}
public boolean isZm(char c){
return ('a'<=c&&c<='z'||'A'<=c&&c<='Z');
}
public boolean isPalindrome(String s) {
char c1 = '0',c2='0';
boolean result=true;
int p1=0;
int p2=s.length()-1;
while(p1!=p2&&(p1<p2)){
while(p1<s.length()&&!isCharOrNum(s.charAt(p1))){
p1++;
// System.out.println(p1);
}
while(p2>=0&&!isCharOrNum(s.charAt(p2))){
p2--;
// System.out.println(p2);
}
if(p1<s.length()&&p2>=0){
c1=s.charAt(p1);c2=s.charAt(p2);}
if(isZm(c1)){
c1=Character.toLowerCase(c1);
}
if(isZm(c2)){
c2=Character.toLowerCase(c2);
}
if(c1!=c2){
result=false;
break;
}
p1++;p2--;
}
return result;
}
}