验证回文串-leetcode
字母和数字都属于字母数字字符。
给你一个字符串 s,如果它是 回文串 ,返回 true ;否则,返回 false 。
示例 1:
输入: s = “A man, a plan, a canal: Panama”
输出:true
解释:“amanaplanacanalpanama” 是回文串。
示例 2:
输入:s = “race a car”
输出:false
解释:“raceacar” 不是回文串。
示例 3:
输入:s = \" \"
输出:true
解释:在移除非字母数字字符之后,s 是一个空字符串 “” 。
由于空字符串正着反着读都一样,所以是回文串。
class Solution{public: bool isPalindrome(string s) { // 去除非字母非数字 s.erase(std::remove_if(s.begin(), s.end(), [](char c) { return !std::isalnum(c); }), s.end()); // 特殊情况 if (s.empty() || s.size() == 1) return true; for (int i = 0, j = s.size() - 1;; ++i, --j) { if (s[i] >= \'A\' && s[i] <= \'Z\') { s[i] += 32; } if (s[j] >= \'A\' && s[j] <= \'Z\') { s[j] += 32; } if (s[i] == s[j]) { } else { return false; } // 全部判断完成 if (i == j - 1 || i == j - 2) { return true; } } return false; }};