1. 程式人生 > >125 驗證迴文串

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