125. 验证回文串
输入: “A man, a plan, a canal: Panama”
输出: true
解释:“amanaplanacanalpanama” 是回文串
int isalnum ( int c );判断一个字符是否是字母或数字
tolower()
c++ 反向迭代器
.rbegin():指向容器最后一个元素的前一个位置
.rend():指向容器第一个元素
begin():指向容器第一个元素
end():指向容器最后一个元素的前一个位置
++是向前遍历,--是向后遍历
假设一段字符串以逗号分隔,找出第一个单词
string::iterator comma = find(line.begin(), line.end(), ',');
cout << string(line.begin(), comma) << endl;
comma指向逗号的位置
找出最后一个单词,使用.base()
进行转换
string::reverse_iterator rcomma = find(line.rbegin(), line.rend(), ',');
cout<<string(rcomma.base(),line.end())<<endl;
class Solution {
public:
bool isPalindrome(string s) {
string sgood="";
for(char s1:s){
if(isalnum(s1)){
sgood+=tolower(s1);
}
}
string sgood_rev(sgood.rbegin(),sgood.rend());
return sgood==sgood_rev;
}
};
使用双指针
class Solution {
public:
bool isPalindrome(string s) {
string sgood;
for (char ch: s) {
if (isalnum(ch)) {
sgood += tolower(ch);
}
}
int n = sgood.size();
int left = 0, right = n - 1;
while (left < right) {
if (sgood[left] != sgood[right]) {
return false;
}
++left;
--right;
}
return true;
}
};