# 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
```