To check for a palindrome, we use a loop to consider the start and end characters of a string together. We move inwards until we are at the center. If both halves of the string have equal characters, we have a palindrome.
Lines: In this list, I specify an assortment of known palindromes (like "civic"). Punctuation and whitespace is included.
Maketrans: With this method, we create a dictionary to replace all punctuation with spaces. It also lowercases letters.
Translate: This method applies the dictionary created by maketrans to remove unwanted characters. Replace then eliminates spaces.
Info: We pass the reduced strings (which have no punctuation, capital letters or whitespace) to the is_palindrome method.
Python program that checks for palindromes
min = 0
max = len(value) - 1
# Scan string for letter equality at each end.
# ... Move indexes closer to the center after each check.
# Return true if all characters were checked.
if min > max:
a = value[min]
b = value[max]
# Return false is characters are not equal.
if a != b:
# Move inwards.
min += 1
max -= 1
lines = ["civic",
"A man, a plan, a canal: Panama.",
"A Toyota. Race fast, safe car. A Toyota.",
"Cigar? Toss it in a can. It is so tragic.",
"Dammit, I'm mad!",
"Delia saw I was ailed.",
"Desserts, I stressed!",
"Draw, O coward!",
"Live not on evil.",
"Murder for a jar of red rum.",
"Never odd or even.",
"No lemon, no melon.",
"So many dynamos!",
"Step on no pets.",
"Was it a car or a cat I saw?",
"Dot Net Perls is not a palindrome.",
"Why are you reading this?",
"This article is not useful."]
# Use to translate punctuation to spaces.
# ... Changes uppercase to lowercase.
dict = str.maketrans(",:.'!?ABCDEFGHIJKLMNOPQRSTUVWXYZ",
for line in lines:
# Change all punctuation to spaces.
line = line.translate(dict)
# Remove all spaces.
line = line.replace(" ", "")
# See if line is a palindrome.
print("Palindrome: ", line)
print("Not palindrome:", line)
Not palindrome: dotnetperlsisnotapalindrome
Not palindrome: whyareyoureadingthis
Not palindrome: thisarticleisnotuseful
To detect palindromes, we scan the start and end of a string, progressing towards the center. It is possible (and possibly faster) to avoid preprocessing strings. We could modify is_palindrome to ignore non-letter characters.