题目:
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.
题意:
判断当前字符串是否为回文,只考虑字母数字字符而忽略大小写。
字符串为空也为true
解题思路:
首先回文是指 正是这个字符串,置反后也是这个字符串, 如 “level” 和上面的 “amanaplanacanalpanama”也就是回文。
那么理解回文是啥意思后,这题就容易了 ,从前后直接比较每个字符串是否相等就行。
这里可以用前后两个指针,也可以使用栈来解题。
代码:
public boolean isPalindrome(String s) {
Stack<Character> stack = new Stack<Character>();
//过滤空格和非单词字符,将其替换为"",同时将字符串转为小写
String str = s.replaceAll("\\W", "").toLowerCase();
//将字符入栈
for(int i =0;i<str.length();i++) {
stack.push(str.charAt(i));
}
for(int i=0;i<str.length();i++) {
char ch = stack.pop();
if(ch != str.charAt(i)) {
return false;
}
}
return true;
}