59 lines
1.7 KiB
Python
59 lines
1.7 KiB
Python
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")) |