有效的回文

  1. 链接
    https://leetcode.cn/problems/XltzEq/
  2. 题目
    给定一个字符串 s ,验证 s 是否是 回文串 ,只考虑字母和数字字符,可以忽略字母的大小写。
    本题中,将空字符串定义为有效的 回文串 。
    示例:
输入: s = "A man, a plan, a canal: Panama"
输出: true
解释:"amanaplanacanalpanama" 是回文串

输入:s = "0P"
输出:false
解释:"op"不是回文串
  1. 思路:
    字符串中可能会含有数字、大写字母、小写字符、空格、符号等,把数字和字母存下来,其余舍去。此外,因为字母不分大小写,所以大写字母要转换为小写字母。
  2. 注意:
    1. tolower函数,把字母字符转换为小写,非字母字符不处理;
    2. isalnum函数,判断字符变量是否为数字或者字母,若是则返回非零,否则返回零;
    3. ASCII
      在这里插入图片描述
  3. 代码:
class Solution {
public:
    bool isPalindrome(string s) {
        //第一种,使用ASCII
        int i,j;
        vector<char> ans; //储存转换后的字符串
        for(i=0;s[i]!='\0';i++){
        //大写字母转换为小写字母
            if(s[i]>='A'&&s[i]<='Z')
            s[i]=s[i]+32;
        //如果为有效字符(数字和字母),存入ans字符串
            if((s[i]>='a'&&s[i]<='z')||(s[i]>='0'&&s[i]<='9')){
                ans.push_back(s[i]);
            }
        }
        //本题把空字符串判为回文串,返真
        if(ans.size()==0)
        return true;
        //进行回文串判断
        for(i=0,j=ans.size()-1;i<j;i++,j--)
        if(ans[j]!=ans[i])
        return false;
        return true;

        //第二种,使用特殊函数
        string ans;
        for(char ch:s){
            if(isalnum(ch)){
                ans+=tolower(ch);
            }
        }
        //倒置
        string ans_rev(ans.rbegin(),ans.rend());
        return ans==ans_rev;
    }
};
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值