125 驗證迴文串
阿新 • • 發佈:2018-12-08
給定一個字串,驗證它是否是迴文串,只考慮字母和數字字元,可以忽略字母的大小寫。
說明:本題中,我們將空字串定義為有效的迴文串。
示例 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; } };