LeetCode-125——验证回文串

验证回文串(简单)

题目要求

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。

​ 说明:本题中,我们将空字符串定义为有效的回文串。

​ 示例:

1
2
3
4
输入: "A man, a plan, a canal: Panama"
输出: true
输入: "race a car"
输出: false

C++双指针法解决

思路

​ 首先,验证一个普通的标准字符串是不是回文串就是看前后对应位置的字符是不是相同,这明显时要用到双指针前后并行着对照呀

​ 不过根据题目的要求,空格应不计算在内,所以这里要在每次检测元素是否对称前先排除掉中间的空格,并且统一将对应元素转换成小写或者大写来进行比较

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Solution {
public:
bool isPalindrome(string s) {
int i = 0, j = s.size() - 1;
if (s.size() <= 1)
return true;
while (i < j) {
while (i < j && !isalnum(s[i]))
i++;
while (i < j && !isalnum(s[j]))
j--;
if (tolower(s[i++]) != tolower(s[j--]))
return false;
}
return true;
}
};

解释

​ 使用 i 和 j 表示字符串的头尾索引,之后通过一个大循环遍历字符串,在大循环中,要通过两个小循环分别检测当前首位位置是否存在空格,使用循环的目的是防止连续空格,最后通过将对应位置呃赐福全部转换为小写,比较是否相等

-------------本文结束感谢您的阅读-------------