纯C知识验证回文串

题目

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。

示例1:

输入: “A man, a plan, a canal: Panama”
输出: true

示例2:

输入: “race a car”
输出: false

代码(并没有用c++的内置函数)


class Solution {
public:
//用于判断是字母还是数字,还是非法字符
int charac(char c)
    {
        if(((c-'A')>=0&&(c-'A')<=25)||((c-'A')>=32&&(c-'A')<=57))
        {
            return 1;
        }
        else if(((c-'0'>=0)&&(c-'0'<=9)))
            return 2;
        else 
            return 0;
    }
    bool isPalindrome(string s) {
        int l=0,r=s.size()-1;
        if (r<0)return false;    
    while(l<r){
        //用于将非法字符排除
    while(l<r&&(charac(s[l])==0))
       l++;
    while(l<r&&(charac(s[r])==0))
        r--;
        //只要有一个判断的是数字时,则只需判断两者是否相等
    if((charac(s[l])==2||charac(s[r])==2)&&s[l]!=s[r])
        return false;
//当两者均为字母时,需要需要判断是否为大小写以及是否相等,一旦既不是大小写又不相等,则不可能时回文串
    if((charac(s[l])==1&&charac(s[r])==1)&&!((s[l]-32==s[r])||(s[r]-32==s[l]))&&(s[l]!=s[r]))
        return false;
    l++;
    r--;
    
}return true;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值