def isPalindrome(s: str) -> bool:
    tmp = s
    tmp = tmp.lower()
    def is_char(ch):
        if (ch >= 'a' and ch <= 'z') or (ch >= '0' and ch <= '9'):
            return True
        return False
    exp = []
    for lt in tmp:
        if is_char(lt):
            exp.append(lt)
    length = len(exp)
    for index, ele in enumerate(exp):
        if(exp[index] != exp[length - index - 1]):
            return False
    return True

s = 'A man, a plan a canal: Panama'
print(isPalindrome(s))
s = " "
print(isPalindrome(s))
s = "race a car"
print(isPalindrome(s))
s = "0P"
print(isPalindrome(s))