Open In App

C Program to Check for Palindrome String

Last Updated : 18 Apr, 2024
Improve
Improve
Like Article
Like
Save
Share
Report

A string is said to be palindrome if the reverse of the string is the same as the string. For example, “abba” is a palindrome because the reverse of “abba” will be equal to “abba” so both of these strings are equal and are said to be a palindrome, but “abbc” is not a palindrome.

In this article, we will see a simple program to check whether the string is palindrome or not.

Recommended Practice

Algorithm 1 :

  1. Initialize 2 variables, l from the start and h from the end of the given string.
  2. Now, we will compare the characters at index l and h with each other
  3. If the characters are not equal, the string is not palindrome.
  4. If the characters are equal, we will increment l and decrement h.
  5. Steps 2,3 and 4 will be repeated till ( l < h ) or we find unequal characters.
  6. If we reach the condition ( l < h ), it means all the corresponding characters are equal and the string is palindrome.

Basically, we traverse the string in forward and backward directions comparing characters at the same distance from start and end. If we find a pair of distinct characters, the string is not palindrome. If we reach the midpoint, the string is palindrome.

Palindrome String Program in C

C++
#include <iostream>
#include <string>

using namespace std;

bool isPalindrome(string str) {
    int low = 0;
    int high = str.size() - 1;

    // Keep comparing characters while they are same
    while (low < high) {
        if (str[low] != str[high]) {
            return false; // not a palindrome.
        }
        low++; // move the low index forward
        high--; // move the high index backwards
    }
      return true; // is a palindrome     
}

int main()
{
    string str= "abbba";
    string str1 = "abcded";
    
    cout << str << " is palindrome " << isPalindrome(str) << endl;
    cout << str1 << " is palindrome " << isPalindrome(str1) <<endl;
    return 0;
}
C
#include <stdio.h>
#include <string.h>

int isPalindrome(char str[]) {
    int low = 0;
    int high = strlen(str) - 1;

    // Keep comparing characters while they are same
    while (low < high) {
        if (str[low] != str[high]) {
            return 0; // not a palindrome.
        }
        low++; // move the low index forward
        high--; // move the high index backwards
    }
    return 1; // is a palindrome
}

int main() {
    char str[] = "abbba";
    char str1[] = "abcded";
    
    printf("%s is palindrome %d\n", str, isPalindrome(str));
    printf("%s is palindrome %d\n", str1, isPalindrome(str1));
    
    return 0;
}
Java
public class Main {
    // Function to check if a string is a palindrome
    static boolean isPalindrome(String str) {
        int low = 0;
        int high = str.length() - 1;

        // Keep comparing characters while they are same
        while (low < high) {
            if (str.charAt(low) != str.charAt(high)) {
                return false; // not a palindrome.
            }
            low++; // move the low index forward
            high--; // move the high index backwards
        }
        return true; // is a palindrome
    }

    public static void main(String[] args) {
        String str = "abbba";
        String str1 = "abcded";

        System.out.println(str + " is palindrome " + isPalindrome(str));
        System.out.println(str1 + " is palindrome " + isPalindrome(str1));
    }
}

Output
abbba is palindrome 1
abcded is palindrome 0

Time complexity: O(n), where n is the number of characters in the string.
Auxiliary Space: O(1)


Algorithm 2 : (Recursive Approach)

The approach remains the same. Recursively check if it’s a palindrome or not.
Below is the code for better understanding.

C
// C implementation to check if a given
// string is palindrome or not
#include <stdio.h>
#include <string.h>
#include <stdbool.h>

bool isPalindrome(char str[], int l, int h)
{
    // if the string size is 0 or 1
    // it is a palindrome
    if (l >= h)
        return true;

    // if both the terminal characters
    // not matching, not palindrome
    if (str[l] != str[h])
        return false;

    // call the smaller sub-problem
    return isPalindrome(str, l + 1, h - 1);
}

int main()
{
    char str[] = { "abbba" };

    // Start from first and
    // last character of str
    int l = 0;
    int h = strlen(str) - 1;

    bool ans = isPalindrome(str, l, h);
    if (ans) {
        printf("%s is a palindrome\n", str);
    }
    else {
        printf("%s is not a palindrome\n", str);
    }

    return 0;
}

Output
abbba is a palindrome

Time complexity: O(n), where n is the number of characters in the string.
Auxiliary Space: O(1)




Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads