Valid Palindrome

Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.

For example, "A man, a plan, a canal: Panama"is a palindrome. "race a car"isnota palindrome.

Note: Have you consider that the string might be empty? This is a good question to ask during an interview.

For the purpose of this problem, we define empty string as valid palindrome.

首先把字串轉為全小寫,將字串裡面不是字母與數字的部分去, 反轉字串判斷與上一個步驟處理過的字串相等

class Solution(object):
    def isPalindrome(self, s):
        """
        :type s: str
        :rtype: bool
        """
        ss=[i.lower() for i in s if i.isalnum()]
        return ss == ss[::-1]

回文必定是左右对称。所以双指针start/end分别向中间扫描比较。直到start/end对应的数字字母不同,返回false;或start/end相遇,返回true

class Solution(object):
    def isPalindrome(self, s):
        """
        :type s: str
        :rtype: bool
        """
        """
        ss=[i.lower() for i in s if i.isalnum()]
        return ss == ss[::-1]
        """
        ss=[i.lower() for i in s if i.isalnum()]
        start = 0
        end = len(ss) - 1
        while start < end:
            if ss[start] != ss[end]:
                return False
            start += 1
            end -= 1
        return True

Last updated

Was this helpful?