力扣刷题笔记28——验证回文串/isalnum/逆序string

上一篇:力扣刷题笔记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(' ');

力扣刷题笔记28——验证回文串/isalnum/逆序string_第1张图片

逆序string

如何得到一个逆序的string变量。
(如果先得到只有数字和字母的字符串,再得到其逆序,也可以判断回文串。)

	 string a = "da24r";
	 string b(a.rbegin(), a.rend());
	 cout << b;

力扣刷题笔记28——验证回文串/isalnum/逆序string_第2张图片

你可能感兴趣的:(算法题,leetcode,笔记,算法,c++)