Palindrome string
A string whose characters if arranged backwards(or in reverse order) are the same as the original string is called Palindrome.

Examples of palindrome string are dad, kayak, rotor, malayalam etc.

There are many methods to check a palindrome string and all the approaches reverse the string and compare the reversed string with the actual string.
If they both match, the string will be palindrome. This post will cover 4 methods to check if a string is palindrome in python.

Method 1: Using string slicing
Reverse a string using python’s string slicing operator and compare the reversed string to the original string.
If both are equal, then string is palindrome, else not. Example,

# read string from keyboard
original_string = input("Enter a string\n")
# reverse the string
reversed_string = original_string[::-1]
# compare original and reversed string
if(original_string == reversed_string):
    print("String is palindrome")
else:
    print("String is not palindrome")

String slicing operator with double colon(::) accepts numeric arguments on both sides of the colon.
First numeric argument represents the start index, second represents the end index and third represents the number of characters to skip while slicing.

If the first numeric argument is omitted, it is assumed to be 0(means the start of string). Negative index means start from right end.
If the second numeric argument is omitted, it is assumed to be length of string – 1(means the end of string).
If the third numeric argument is omitted, it is assumed to be 1(no skipping). If it is negative, this means that string slicing will be done from right to left direction.

From left to right
Index of first character from left of the string is 0 and index of last character of the string from left is length of string -1.
From right to left
Index of first character from of the string is -1 and index of last character of the string is (-length of string -1).

Thus, for a sample string “codippa the website“, following table will make you understand it better.

PatternResultExplanation
str[1:10:1] or str[1:10:]odippa thStart from index 1 till 9 with an interval of 1 character
str[1:10:2]oip hStart from index 1 till 9 with an interval of 2 characters
str[:10:1]codippa thStart from index 0 till 9 with an interval of 1 character
str[1::1]odippa the websiteStart from index 1 till end with an interval of 1 character
str[:-1:1] or str[:-1:]codippa the websitStart from index 0 till second last character with an interval of 1 character
str[-1:-10:-1] or str[:-10:-1]etisbew eStart from last character from right till the 9th character with an interval of 1 character
str[-2:-10:-1]tisbew eStart from second last character from right till the 9th character with an interval of 1 character

Thus, ::-1 means start from the right end of the string till the left end with an interval of 1 character. It can also be written as -1::-1.
Sample runs of the above program are

Enter a string
codippa
String is not palindrome

Enter a string
rotor
String is palindrome


Method 2
: Using reversed function

Python provides a reversed() function which takes an object and returns an iterator over that object but in reverse order.
The object expected by reversed() function can be a list, a tuple, a string etc. When reversed() function is supplied a string, it returns an iterator which if iterated will return the characters of the string.

Python docs of reversed() function state

reversed(sequence)
Returns a reverse iterator over values of the sequence

This iterator is then supplied to join() function which combines the values in the supplied iterator with the string on which it is called.
Since we want to join() the values(or characters) in the iterator with an empty string, we call join() on an empty string. This will return the reversed string.

This reversed string is compared with the original string to determine if it is palindrome or not.

Python docs for join() function state

S.join(iterable) -> str
Return a string which is the concatenation of the strings in the iterable. The separator between elements is S.

# read string from keyboard
original_string = input("Enter a string\n")
# reverse the string by joining the characters with an empty string
reversed_string = ''.join(reversed(original_string))
# compare original and reversed string
if(original_string == reversed_string):
    print("String is palindrome")
else:
    print("String is not palindrome")

Sample runs of the above program are

Enter a string
kayak
String is palindrome

Enter a string
python
String is not palindrome


Method 3
: Using recursive method

A recursive method calls itself. There should be some condition in this method which should cause it to return else it will keep on calling itself and will be stuck in an infinite loop.

Below code contains a recursive function which accepts a string as an argument and checks if it palindrome or not.

First it checks whether the length of the string is 0. If it is 0 means the string is palindrome since 0 length strings are considered to be palindrome.

Next, it compares the first and last characters of the string. If they match, it calls itself supplying it the string with first and last characters removed.

Again, it repeats the same set of steps with the first and last characters of remaining string removed. This way all the characters of the string are compared.

If the first and last characters during any invocation of this function do not match, then the function returns False.

# recursive function to check if string is palindrome or not
def isPalindrome(str):
    # zreo length strings are palindrome, hence return True
    if len(str) ==0:
        return True
    # check if first and last character of string match
    if str[0] == str[-1]:
        # call itself with first and last characters removed
        return isPalindrome(str[1:-1])
    # return if first and last characters do not match
    return False

# read string from keyboard
original_string = input("Enter a string\n")
# call palindrome function
palindrome = isPalindrome(original_string)
if(palindrome == True):
    print("String is palindrome")
else:
    print("String is not palindrome")

Following are the sample runs of above program

Enter a string
parrot
String is not palindrome

Enter a string
erre
String is palindrome


Method 4
: Using iterative approach

Initialize a variable(say A) equal to the length of the string or the number of characters in it. Subtract 1 from this variable so that it points to the last character(since index of characters of string start from 0 till 1 less than length of the string).

Iterate over the characters of the string starting from left to right. In every iteration compare the character at current loop count position and character at corresponding right end using the variable(A) initialized above.

If they both match, then continue with next iteration and decrease the value of variable(A) by 1 so that each character from the left end is compared with the corresponding character at the right end.

Continue iteration till any two characters do not match or value of variable(A) becomes lesser than the current loop count which means that all characters have been compared.
Example program follows

# iterative function to check if string is palindrome or not
def isPalindrome(str):
    # get index of last character of string
    endIndex = len(str) - 1
    # iterate over string
    for index in range(len(str)):
        # check if whole string has been checked
        if endIndex < index:
            return True
        # compare left and right characters 
        if str[index] == str[endIndex]:
            endIndex = endIndex - 1
        else:
        # characters don't match, string is not palindrome
            return False

# read string from keyboard
original_string = input("Enter a string\n")
# call palindrome function
palindrome = isPalindrome(original_string)
if(palindrome == True):
    print("String is palindrome")
else:
    print("String is not palindrome")

Sample runs of the above program produce following output

Enter a string
rabbit
String is not palindrome

Enter a string
dad
String is palindrome

If you are familiar with any other approaches to check for a palindrome string, comment in the space below.