双指针法
- 指针设置:
- fast 指针指向需要迭代遍历的数组尾部,向前移动;
- slow 指针指向需要迭代遍历的数组头部,向后移动;
- 思路:
- 依次逐字符比较头部、尾部字符,如果不相等直接返回 false;
- 比较前,如果不是字符(std::isalnum())移动指针;
- 都转换成大写或者小写字符(std::tolower())进行比较;
class Solution {
public:
bool isPalindrome(string s) {
int size = s.size();
int slow = 0;
int fast = size - 1;
while (slow < fast) {
while (slow < fast && !std::isalnum(s[slow])) {
++slow;
}
while (slow < fast && !std::isalnum(s[fast])) {
--fast;
}
if (slow < fast) {
if (std::tolower(s[slow]) != std::tolower(s[fast])) {
return false;
}
++slow;
--fast;
}
}
return true;
}
};