Valid Palindrome
leetcode.com/problems/valid-palindrome/
Two Passes
Create a formatted list of characters, then verify from two ends to middle.
s = [c for c in s.casefold() if c.isalnum()]
if not len(s):
return True
q = len(s) // 2
for i in range(q):
if s[i] != s[-(i + 1)]:
return False
return TrueA more Pythonic version:
s = [c.lower() for c in s if c.isalnum()]
return all(s[i] == s[~i] for i in range(len(s) // 2))Similarly
s = "".join([c.lower() for c in s if c.isalnum()])
l = len(s) // 2
return s[:l] == s[-1:~l:-1]One Pass, Two Cursors
l = 0
r = len(s) - 1
while l < r:
if not s[l].isalnum():
l += 1
continue
if not s[r].isalnum():
r -= 1
continue
if not s[l].lower() == s[r].lower():
return False
else:
l += 1
r -= 1
return True