跳至主要內容

Leetcode 125. Valid Palindrome

A phrase is a palindrome if, after converting all uppercase letters into lowercase letters and removing all non-alphanumeric characters, it reads the same forward and backward. Alphanumeric characters include letters and numbers.

Given a string s, return true if it is a palindrome, or false otherwise.

Example 1:Input: s = “A man, a plan, a canal: Panama” Output: true Explanation: “amanaplanacanalpanama” is a palindrome.

Example 2:Input: s = “race a car” Output: false Explanation: “raceacar” is not a palindrome.

Example 3:Input: s = ” ” Output: true Explanation: s is an empty string “” after removing non-alphanumeric characters. Since an empty string reads the same forward and backward, it is a palindrome.

Constraints:

  • 1 <= s.length <= 2 * 105
  • s consists only of printable ASCII characters.

It’s easy to use regular expression to process first.

class Solution:
    def isPalindrome(self, s: str) -> bool:
        processed_str = re.sub(r'[^a-zA-Z0-9]', '', s)
        processed_str = processed_str.lower()

        return processed_str[::-1] == processed_str

You can also use two pointers to match

class Solution:
    def isPalindrome(self, s: str) -> bool:
        start = 0
        end = len(s) - 1
        while start < end:
            while not s[start].isalnum() and start < end:
                start += 1

            while not s[end].isalnum() and start < end:
                end -= 1
            
            if s[start].lower() != s[end].lower():
                return False
            else:
                start += 1
                end -= 1

        return True
分類:LeetcodeTwo pointers

搶先發佈留言

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

由 Compete Themes 設計的 Author 佈景主題