题目描述:给字符串判断是否回文,只考虑数字和字母,忽略其他字符。如:
"A man, a plan, a canal: Panama" is a palindrome.
"race a car" is not a palindrome.
分析:忽略除数字字母以外的字符,左右两边同时遍历判断即可。时间复杂度O(n),空间O(1)。
代码:
class Solution {
public:
bool isPalindrome(string s) {
//首先将所有字符都转换成小写
transform(s.begin(), s.end(), s.begin(), ::tolower);
auto l = s.begin(), r = prev(s.end());
while(l < r)
{
//isalnum判断字符是否是字母或数字
if (!::isalnum(*l)) l++;
else if (!::isalnum(*r)) r--;
else if (*l != *r) return false;
else
{
l ++;
r --;
}
}
return true;
}
};
网友评论