125 验证回文串

 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。

说明:本题中,我们将空字符串定义为有效的回文串。

示例 1:

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

示例 2:

输入: "race a car"
输出: false

【思路】

两个指针分别从头和尾开始遍历判断,如果不是字母和数字则continue;若是,则判断两个字符是否相等,不相等直接返回false.

这里不区分大小写,所以大写字母统一转小写;或者小写转大写,再比较。 

class Solution {
public:
    bool isPalindrome(string s) {
        int left=0;
        int right=s.size()-1;
        if(s.empty())
            return true;
        while(left<right)
        {
            if(!isAlphaNum(s[left])) ++left;
            else if(!isAlphaNum(s[right])) --right;
            else if((s[left]+32-'a')%32!=(s[right]+32-'a')%32)//大写字母转小写后比较
                return false;
            else{
                ++left;
                --right;
            }
        }    
        return true;
        
    }
    bool isAlphaNum(char &ch) {
        if (ch >= 'a' && ch <= 'z') return true;
        if (ch >= 'A' && ch <= 'Z') return true;
        if (ch >= '0' && ch <= '9') return true;
        return false;
    }
};

猜你喜欢

转载自blog.csdn.net/zpznba/article/details/84875527