上一篇:力扣刷题笔记26——最小的k个数/快速排序学习/快排与冒泡的时间复杂度
文章目录
- 题目:
- 我的方法:
- isalnum函数
- 逆序string
题目:
如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。
字母和数字都属于字母数字字符。
给你一个字符串 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语句看着比较复杂。
isalnum函数
功能:判断是否为数字或字母,如果是则返回非零值,否则返回0。
cout<<isalnum('a');cout << isalnum('1');cout << isalnum('0');cout << isalnum('/');cout << isalnum('=');cout << isalnum(' ');
逆序string
如何得到一个逆序的string变量。
(如果先得到只有数字和字母的字符串,再得到其逆序,也可以判断回文串。)
string a = "da24r";string b(a.rbegin(), a.rend());cout << b;