Description
Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.
Note: For the purpose of this problem, we define empty string as valid palindrome.
Example 1:
Input: "A man, a plan, a canal: Panama"
Output: true
Example 2:
Input: "race a car"
Output: false
Discuss
一道比较简单的回文字符串问题,只需要去除掉多余的符号看可以了。
这里我们使用正则表达式来去除符号。
str.trim();//去除首尾空格
str.replace(" ","");//去掉所有空格,包括首尾,中间
str.replaceAll(" +","");//去掉所有空格,包括首尾,中间
str.replaceAll("\\s*",""); //可以替换大部分空白字符, 不限于空格 . 说明:\s 可以匹配空格、制表符、换页符等空白字符的其中任意一个
//string去除标点符号
//正则表达式去除标点
str.replaceAll("\\p{Punct}","");//不能完全清除标点
str.replaceAll("\\pP","");//完全清除标点
str.replaceAll("\\p{P}","");//同上,一样的功能
str.replaceAll("[\\pP\\p{Punct}]","");//清除所有符号,只留下字母 数字 汉字 共3类.
Code
class Solution {
public boolean isPalindrome(String s) {
if (s == null || s.length() == 0) {
return true;
}
s = s.toLowerCase();
s = s.replace(" ", "").replaceAll("[\\pP\\p{Punct}]", "");
int len = s.length();
int left = 0, right = len - 1;
while (left <= right) {
char a = s.charAt(left);
char b = s.charAt(right);
if (a != b) {
return false;
}
left++;
right--;
}
return true;
}
}