Thursday, December 22, 2022

Python Program to Check Whether String is Palindrome or Not

This post is about writing a Python program to find whether a given string is a palindrome or not.

A String is a palindrome if reverse of the string is same as the original string. For example "madam" is a palindrome as reverse of the madam is again madam another example is "malayalam".

Logic for the palindrome program

1. One way to find whether a given string is a palindrome or not is to reverse the given string. If reverse of the string and original string are equal that means string is a palindrome.
2. Another way is to iterate string and compare characters at both ends (start and end) for equality. Any time if a character is found that is not equal before start > end then it is not a palindrome.

1. Reversing string and comparing

For reversing a string in Python best way is to use string slicing with a negative increment number to get the string backward. Once you have the reversed string compare it with original string to check if both are equal or not.

import re
def reverse_string(string):
rstring = string[::-1]
return rstring

def is_palindrome(s):
rstring = reverse_string(s)
return True if (rstring == s) else False

# if more than one word remove spaces
# s = re.sub("^\\s+|\\s+\$|\\s+", "", s)
# print(s)
flag = is_palindrome(s)
if flag == 1:
print(s, 'is a palindrome')
else:
print(s, 'is not a palindrome')

Output

Note that if string has more than one word like “nurses run” then remove the spaces from the string before checking for palindrome string. You can uncomment the commented lines for that.

2. Comparing characters from start and end of the string

You can also compare characters from both ends of the string, if any time a character is found which is not equal then the passed string is not a palindrome. Python program to find whether given string is a palindrome or not using this logic can be written both as a recursive function and iterative function.

Recursive function is given first.

def is_palindrome(s):
print(s)
if len(s) == 0:
return True
else:
if s[0] == s[-1]:
# remove start and end characters
return is_palindrome(s[1:len(s)-1])
else:
return False

flag = is_palindrome(s)
if flag == 1:
print(s, 'is a palindrome')
else:
print(s, 'is not a palindrome')

Output

d

As an iterative function.

def is_palindrome(s):
# last index
end = len(s) - 1;
for start in range(len(s)):
# all the characters are compared and are equal
if start > end:
return True
else:
# compare characters at both ends
if s[start] == s[end]:
# move towards left
end -= 1
else:
return False

s = "malayalam"
flag = is_palindrome(s)
if flag == 1:
print(s, 'is a palindrome')
else:
print(s, 'is not a palindrome')

Output

malayalam is a palindrome

That's all for this topic Python Program to Check Whether String is Palindrome or Not. If you have any doubt or any suggestions to make please drop a comment. Thanks!