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;
}

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


版权声明:本文为weixin_43425544原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。