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 True

A 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