Valid Palindrome
Difficulty: Easy
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.
思路
- 用了regular expression 提出去string array然后合并成string再判断,超时了
- 所以就直接做了(可以用两个指针,也可以用stack类似于判断括号是否一致的办法)
- 这个方法不是很好,不需要用hashset
- 可以写一个valid character函数来判断是不是有效就可以,
- 比如
public boolean isValid(char c)
{
return (c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z' || c >= '0' && c <= '9') ? true : false;
}
s = s.replaceAll("[^a-zA-Z0-9]", "").toLowerCase();
代码
public class Solution {
public boolean isPalindrome(String s) {
if (s.equals("")) {
return true;
}
for (int i = 0, j = s.length() - 1; i < j; i++, j--) {
char c1 = s.charAt(i);
char c2 = s.charAt(j);
while (i < j && !Character.isLetterOrDigit(c1)) {
i++;
c1 = s.charAt(i);
}
while (i < j && !Character.isLetterOrDigit(c2)) {
j--;
c2 = s.charAt(j);
}
if (Character.toUpperCase(c1) != Character.toUpperCase(c2)) {
return false;
}
}
return true;
}
}