不计非字母数字的元素和大小写,判断是否是回文字符串。
Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.
For example,
"A man, a plan, a canal: Panama" is a palindrome.
"race a car" is not a palindrome.
Note:
Have you consider that the string might be empty? This is a good question to ask during an interview. 定义:空string也是回文。
For the purpose of this problem, we define empty string as valid palindrome.
注意:
- 1.非字母数字的元素处理
- 空string
- 字符串里的数字要加' ' 这个小错误导致一直报错。
- s.replaceAll("\\W", "") 这个方法可以直接把不合法字符删除。
\\w*是正则表达式.
\\w表示的是数字或字母。 * 的意思表示零个或多个。
因此\\w* 表示的是任意个数字或字母组合。
Runtime: 9 ms
class Solution {
public boolean isPalindrome(String s) {
int len = s.length();
if(len == 0) return true;
s = s.toLowerCase();
for(int i =0, j = len-1; i< j;i++,j--){
while(!isValidChar(s.charAt(i)) && i<j) i++;
while(!isValidChar(s.charAt(j)) && i<j) j--;
if(s.charAt(i) != s.charAt(j) ) return false;
}
return true;
}
private boolean isValidChar(char x){
return ((x >= '0' && x <= '9' ) || (x >= 'a' && x <= 'z')) ;
}
}