1. 程式人生 > >LeetCode演算法題125:驗證迴文串解析

LeetCode演算法題125:驗證迴文串解析

給定一個字串,驗證它是否是迴文串,只考慮字母和數字字元,可以忽略字母的大小寫。
說明: 本題中,我們將空字串定義為有效的迴文串。
示例1:

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

示例2:

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

這個題首先的想法是先把所有字元轉換成小寫,然後取出所有字母數字,然後反向對比,但是這樣一般的思路來說要進行三次迴圈,事實上完全可以走一次迴圈完成。左右兩邊開始遍歷,如果左邊或者右邊不是字母數字,那就更新索引,如果都是字母或數字,則進行對比(這裡要進行大小寫轉換的操作),不相等就返回false,相等則繼續對比,直到兩個索引相等。
C++原始碼:

class Solution {
public:
    bool isPalindrome(string s) {
        int left = 0;
        int right = s.size() - 1;
        while(left < right){
            if (!isalnum(s[left])) left++;
            else if (!isalnum(s[right])) right--;
            else if ((s[left]+32-'a')%32 != (s[right]+32-'a'
)%32) return false; else{ left++; right--; } } return true; } };

python3原始碼:

class Solution:
    def isPalindrome(self, s):
        """
        :type s: str
        :rtype: bool
        """
        left = 0
        right =
len(s) - 1 while left < right: if not s[left].isalnum(): left += 1 elif not s[right].isalnum(): right -= 1 elif s[left].upper() != s[right].upper(): return False else: left += 1 right -= 1 return True