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.
For the purpose of this problem, we define empty string as valid palindrome.
public class Solution {
public boolean isPalindrome(String s) {
}
}
分析:
有效回文。
给你一个字符串,判断其是否是回文(正反读一样),只考虑文字和数字(遇到空格符号则忽略) 并且忽略大小写。
"A man, a plan, a canal: Panama”
是回文
"race a car"
不是回文。
对于空字符串,我们认为其事有效的回文。
思考:
将字符串写成一个新串,其中删掉空格和符号,并统一为大写。
然后字符串长度/2 为循环,判断其前后字符是否相等即可。
注意空字符串情况。
[^xyz]
|
负值字符集合。匹配未包含的任意字符。例如,“[^abc]”可以匹配“plain”中的“plin”。
|
public static boolean isPalindrome(String s) {
// StringBuffer SB= new StringBuffer();
s=s.replaceAll("[^a-z^A-Z^0-9]", "");
s=s.toUpperCase();
for(int i=0;i<s.length()/2;i++){
if (s.charAt(i)!=s.charAt(s.length()-i-1)) return false;
}
return true;
}
该问题的关键是使用正则表达式,并通过替换所有非数字和字母的字符为””。
然后统一大小写。最后比较即可。