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

上一篇:力扣刷题笔记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语句看着比较复杂。

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;

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小欣CZX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值