自学内容网 自学内容网

125.验证回文串-力扣(LeetCode)

题目:

解题思路:

        首先进行移除非字母数字字符,并将大写字符转换为小写字符的操作。这个过程中,主要利用快慢指针的方式来进行移除操作,通过加32将大写字符转换为小写字符。完成后,将前一半的数据与后一半的数据进行比对。

        c库中有专门判断字符的函数,可以简化判断条件(如代码二所示,头文件<ctype.h>),isalnum函数用来判断是否为数字或字母字符,isupper函数用来判断是否为大写字母,类似功能的字符函数还有很多。

代码:

代码一:

bool isPalindrome2(char *s)
{
    //移除非字母数字字符,并将大写字符转换为小写字符
    char *fast = s;
    char *slow = s;
    while(*fast)
    {
        if((*fast >= 'a' && *fast <= 'z') || (*fast >= 'A' && *fast <= 'Z') || (*fast >= '0' && *fast <= '9'))
        {
            if(*fast >= 'A' && *fast <= 'Z')
            {
                *fast = *fast + 32;//转换
            }
            *slow = *fast;
            slow++;
        }
        fast++;
    }
    *slow = '\0';
    //判断
    for(int i = 0; i < strlen(s)/2; i++)
    {
        if(s[i] != s[strlen(s)-i-1])
            return false;
    }
    return true;
}

代码二:

bool isPalindrome(char *s)
{
    int i = 0, j = 0;
    while(s[i])
    {
        if(isalnum(s[i]))
        {
            if(isupper(s[i]))//转换
            {
                s[j++] = s[i] + 32;
            }
            else
                s[j++] = s[i];
        }
        i++;
    }
    s[j] = '\0';
    for(int k = 0; k < strlen(s) / 2; k++)
    {
        if(s[k] != s[strlen(s)-k-1])
        {
            return false;
        }
    }
    return true;
}

原文地址:https://blog.csdn.net/a921876874/article/details/143891845

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!