版权声明:本文未经允许不得转载 https://blog.csdn.net/weixin_43873349/article/details/89501001
leetcode c++ 125 验证回文串
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: “A man, a plan, a canal: Panama”
输出: true
示例 2:
输入: “race a car”
输出: false
首先,c++有个内置的STL的函数transform(),大概的意思就是把一个序列经过变换输出到第三个参数的容器中,本题中用于将给定的字符串转换为小写字符。本人也是第一次用这个函数。
其次,还有一个函数就是判断字符是否是字母或数字的函数isalnum()。
进入正题,本题思路就是:若果给定字符串是空串,那么直接返回true。如不空,循环判断,将给定字符串全部转换为小写字符,然后遇到不是字母也不是数字的字符就跳过,如果有不同的字符直接返回false。知道左边右边的字符都比较完结束。
下面上代码
class Solution {
public:
bool isPalindrome(string s) {
if(s.empty()){
return true;
}
transform(s.begin(), s.end(), s.begin(), ::tolower);
int left = 0;
int right = s.size() - 1;
while(left < right){
if(!isalnum(s[left])){
++left;
} else if(!isalnum(s[right])){
--right;
} else if(s[left] != s[right]){
return false;
} else {
++left;
--right;
}
}
return true;
}
};