125. 验证回文串

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

bool isPalindrome(char * s){
    if(s == NULL)
    {
        return true;
    }
    bool flag = true;
    bool out = false;
    int len = strlen(s);
    char *str = (char*)malloc(sizeof(char) * len);
    memcpy(str, s, sizeof(char) * len);
    for(int i = 0, j = len-1; i < j; i++, j--)
    {
        while(!((s[i] >= 'a' && s[i] <= 'z') || (s[i] >= 'A' && s[i] <= 'Z') || (s[i] >= '0' && s[i] <= '9')))
        {
            if(++i >= j)
            {
                out = true;
                break;
            }
        }

        while(!((s[j] >= 'a' && s[j] <= 'z') || (s[j] >= 'A' && s[j] <= 'Z') || (s[j] >= '0' && s[j] <= '9')))
        {
            if(--j <= i)
            {
                out = true;
                break;
            }
        }

        if(s[i] >= 'a' && s[i] <= 'z')
        {
            str[i] -= 32;
        }

        if(s[j] >= 'a' && s[j] <= 'z')
        {
            str[j] -= 32;
        }

        if(str[i] - str[j] != 0 && !out)
        {
            flag = false;
            break;
        }

    }

    return flag;
}

思路:主要先让非字母和数字的字符去掉或者跳过,然后判断首尾的字符是否相等,还要注意不区分大小写

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值