Skip to content

125. Valid Palindrome

EasyLeetCode

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 * 10^5
  • s consists only of printable ASCII characters.

How to solve the problem

  • For loop
  • Py3 Library Function
  • Two pointers
python
# Approach 1: For loop
class Solution:
    def isPalindrome(self, s: str) -> bool:
        sCleaned = ""
        for c in s:
            if c.isalnum():
                sCleaned += c.lower()

        sReversed = sCleaned[::-1]

        if sReversed == sCleaned:
            return True
        return False
python
# Approach 2: Py3 Library Function
class Solution:
    def isPalindrome(self, s: str) -> bool:
        s = "".join(filter(str.isalnum, s)).lower()
        return s == s[::-1]
python
# Approach 3: Two pointers
class Solution:
    def isPalindrome(self, s: str) -> bool:
        i, j = 0, len(s) - 1
        while i < j:
            if not s[i].isalnum():
                i += 1
                continue
            if not s[j].isalnum():
                j -= 1
                continue
            if s[i].lower() == s[j].lower():
                i += 1
                j -= 1
            else:
                return False
        return True

Complexity

  • Approach 1 (For loop): Time complexity: O(n), Space complexity: O(n)
  • Approach 2 (Py3 Library Function): Time complexity: O(n), Space complexity: O(n)
  • Approach 3 (Two pointers): Time complexity: O(n), Space complexity: O(1)

Comments

No comments yet. Be the first to comment!