import string import math def isPalindrome(s): """ :type s: str :rtype: bool """ # Create a translation table to remove uppercase letters and special characters # translation_table = str.maketrans("","", string.punctuation + string.whitespace) translation_table = ''.join(c.lower() if c.isupper() or c.isalnum() else '' for c in s if c.isalnum() or c in string.whitespace) # print(translation_table) if len(translation_table) == 2: if translation_table[0] == translation_table[1]: return True else: return False # Use the translation table to remove uppercase letters and special characters # upper_string = s.translate(translation_table) # lower_string = upper_string.lower() lower_string = translation_table half = len(lower_string)/2 # Round the value down since middle value doesn't matter if len(lower_string)%2 != 0: halfdown = int(math.floor(half)) else: halfdown = int(half) # print(halfup) # print(halfdown) first = [] second = [] print(lower_string) for i in range(halfdown): # print(i) # print(lower_string[i]) first.append(lower_string[i]) if len(lower_string)%2 != 0: for j in range(halfdown+1, len(lower_string)): second.insert(0, lower_string[j]) else: for j in range(halfdown, len(lower_string)): second.insert(0, lower_string[j]) print(first) print(second) if first == second: return True else: return False print(isPalindrome("A man, a plan, a canal: Panama")) print(isPalindrome("aa")) print(isPalindrome("0P")) print(isPalindrome("abba"))