上一篇:力扣刷题笔记26——最小的k个数/快速排序学习/快排与冒泡的时间复杂度
如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。
字母和数字都属于字母数字字符。
给你一个字符串 s,如果它是 回文串 ,返回 true ;否则,返回 false 。
前后指针,如果是回文串,那前后索引的结果肯定是一样的,否则遇到一个不一样的就直接返回false。
class Solution {
public:
bool isPalindrome(string s) {
int lens = s.length();
if(lens==1) return true;//如果只有一个,那肯定是回文串
int left = 0,right = lens-1;
while(left<=right){
//如果s[left]不是字母或数字,移到下一位
if((tolower(s[left])-'a'>25||tolower(s[left])-'a'<0)&&(tolower(s[left])-'0'>9||tolower(s[left])-'0'<0)){
left++;
continue;
}
//如果s[right]不是字母或数字,移到下一位
if((tolower(s[right])-'a'>25||tolower(s[right])-'a'<0)&&(tolower(s[right])-'0'>9||tolower(s[right])-'0'<0)){
right--;
continue;
}
//如果s[left]和s[right]一样,则各移动一位
if(tolower(s[left])==tolower(s[right])){
left++;
right--;
}
else{//如果s[left]和s[right]不一样,则不是回文串
return false;
}
}
return true;
}
};
不足:想不到合适的方法来确认是不是字母或数字,所以if语句看着比较复杂。
功能:判断是否为数字或字母,如果是则返回非零值,否则返回0。
cout<<isalnum('a');
cout << isalnum('1');
cout << isalnum('0');
cout << isalnum('/');
cout << isalnum('=');
cout << isalnum(' ');
如何得到一个逆序的string变量。
(如果先得到只有数字和字母的字符串,再得到其逆序,也可以判断回文串。)
string a = "da24r";
string b(a.rbegin(), a.rend());
cout << b;