125. Valid Palindrome
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
Solution1:
过滤成回文串去计算, 需要O(n)的空间复杂度// Time:O(n), Space:O(n)
class Solution {
public:
bool isPalindrome(string s) {
if (s.length() == 0) return true;
string t;
for (char c : s) {
if (isdigit(c) || isalpha(c)) {
t += tolower(c);
}
}
int n = t.length();
for (int i = 0; i <= n/2; i++) {
if (t[i] != t[n-1-i]) return false;
}
return true;
}
};
Solution2:
用two pointers的方法, 在原地进行判断,
注意点:
- 数字和字母, 可以用isalnum()这个函数..
- 注意还要ignore case, 因此使用tolower在判断前。
// Time:O(n), Space:O(1) |