Solution
class Solution:
def isPalindrome(self, s: str) -> bool:
i, j = 0, len(s) - 1
while i < j:
if not s[i].isalnum():
i += 1
elif not s[j].isalnum():
j -= 1
elif s[i].lower() != s[j].lower():
return False
else:
i, j = i + 1, j - 1
return True
# ----------------本地测试----------------
if __name__ == "__main__":
sol = Solution()
print(sol.isPalindrome("A man, a plan, a canal: Panama")) # True
print(sol.isPalindrome("race a car")) # False
print(sol.isPalindrome("")) # True
print(sol.isPalindrome(" ")) # True