125. Valid Palindrome
EasyLeetCodeA 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:
trueExplanation: "amanaplanacanalpanama" is a palindrome.
Example 2
Input: s =
"race a car"Output:
falseExplanation: "raceacar" is not a palindrome.
Example 3
Input: s =
" "Output:
trueExplanation: 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^5sconsists 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 Falsepython
# 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 TrueComplexity
- 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!