力扣-125. 验证回文串

文章目录

      • 力扣题目
      • 代码

力扣题目

如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。

字母和数字都属于字母数字字符。

给你一个字符串 s,如果它是 回文串 ,返回 true ;否则,返回 false 。

示例 1:

输入: s = “A man, a plan, a canal: Panama”
输出:true
解释:“amanaplanacanalpanama” 是回文串。
示例 2:

输入:s = “race a car”
输出:false
解释:“raceacar” 不是回文串。
示例 3:

输入:s = " "
输出:true
解释:在移除非字母数字字符之后,s 是一个空字符串 “” 。
由于空字符串正着反着读都一样,所以是回文串。

代码

思路分析:
1.写一个函数my_isDigPha判断字符是否是字母数字,如果大写需要转换为小写;
2.设置一前一后2个指针,跳过非字母数字的字符,然后对比2个字符是否相同,如果存在不相同的那就不是回文串。

int my_isDigPha(char *s)
{
    if((*s >= 'A' && *s <= 'Z') || (*s >= 'a' && *s <= 'z')  || (*s >= '0' && *s <= '9'))
    {
        if(*s >= 'A' && *s <= 'Z')
        {
            *s += 32;
        }
        return 1;
    }
    else
    {
        return 0;
    }
}

bool isPalindrome(char* s) 
{
    int i = 0;
    int j = strlen(s) - 1;

    while(i <= j)
    {
        /*跳过非字母数字字符*/
        if((my_isDigPha(&s[i]) != 0) && (my_isDigPha(&s[j]) != 0))
        {
            if(s[i] != s[j])
            {
                return false;
            }
            i++;
            j--;
        }
        else
        {
            if(my_isDigPha(&s[i]) == 0)
            {
                i++;
            }

            if(my_isDigPha(&s[j]) == 0)
            {
                j--;
            }
        }
    }

    return true;
}

你可能感兴趣的:(LeetCode,leetcode,c语言)