题目:验证回文串

isPalindrome()

 1bool isPalindrome(string s)
 2{
 3    if(s.size() == 1) return true;
 4    // 定义左右指针
 5    int left = 0, right = s.size() - 1;
 6    // 不需要考虑 left = right 的情况
 7    // 因为中间多一个字符的情况可以直接当作偶数串处理
 8    while(left < right)
 9    {
10        // 拿到左边的数字或字符
11        while(left < right && !isalnum(s[left]))
12        {
13            left++;
14        }
15
16        // 拿到右边的数字或字符
17        while(left < right && !isalnum(s[right]))
18        {
19            right--;
20        }
21
22        // 如果是大写就将其转换为小写
23        // 如果已经是小写或数字就原样返回
24        if(std::tolower(s[left]) != std::tolower(s[right])) return false;
25        // 移动指针
26        left++;right--;
27    }
28    return true;
29}

来源:语雀原笔记