题目:验证回文串
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}
来源:语雀原笔记