# Valid Palindrome leetcode.com/problems/valid-palindrome/ ## Two Passes Create a formatted list of characters, then verify from two ends to middle. ```python 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: ```python s = [c.lower() for c in s if c.isalnum()] return all(s[i] == s[~i] for i in range(len(s) // 2)) ``` Similarly ```python 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 ```python 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 ```