Anusha Murali

Logo

Please see github.com/anusha-murali for all of my repositories.

View GitHub Profile

Valid Palindrome

This simple LeetCode problem (Problem #141) demonstrates the power of two pointers to reduce runtime.

Problem:

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.

Solution

    def isPalindrome(s: str) -> bool:
        l = [x for x in list(s.lower()) if x.isalnum()]

        left = 0
        right = len(l)-1
        while left < right:
            if l[left] == l[right]:
                left += 1
                right -= 1
            else:
                return False
        return True

Runtime: Runtime is $O(n)$ and the space complexity is $O(n)$ (as we are creating a list of size $n$).

Back to Two Pointers Problems


anusha-murali.github.io