题目描述
A phrase is a palindrome if, after converting all uppercase letters into lowercase letters and removing all non-alphanumeric characters, it reads the same forward and backward. Alphanumeric characters include letters and numbers.
Given a string s, return true if it is a palindrome, or false otherwise.
翻译过来就是,剔除掉字符串中的非字母字符后,判断这个字符是否是回文串。
Example 1:
Input: s = “A man, a plan, a canal: Panama”
Output: true
Explanation: “amanaplanacanalpanama” is a palindrome.
Example 2:
Input: s = “race a car”
Output: false
Explanation: “raceacar” is not a palindrome.
Example 3:
Input: s = " "
Output: true
Explanation: s is an empty string “” after removing non-alphanumeric characters.Since an empty string reads the same forward and backward, it is a palindrome.
Constrains:
-
1 <= s.length <= 2 ∗ 1 0 5 2*10^5 2∗105
-
s consists only of printable ASCII characters.
解答思路
先使用C++ string的erase搭配remove函数剔除掉所有的非字母字符,然后使用reverse函数进行逆转判断是否是回文串!
class Solution {
public:
bool isPalindrome(string s) {
s.erase(std::remove_if(s.begin(), s.end(),
[]( auto const& c ) -> bool { return !std::isalnum(c); } ), s.end());
transform(s.begin(), s.end(), s.begin(), ::tolower);
string before = s;
reverse(s.begin(), s.end());
if(before == s)
return true;
else
return false;
}
};
(其实是空间换时间)