# Check whether the given string is Palindrome using Stack

Given string str, the task is to find whether the given string is a palindrome or not using a stack.

Examples:

Input: str = “geeksforgeeks”
Output: No
Output: Yes

Approach:

• Find the length of the string say len. Now, find the mid as mid = len / 2.
• Push all the elements till mid into the stack i.e. str[0…mid-1].
• If the length of the string is odd then neglect the middle character.
• Till the end of the string, keep popping elements from the stack and compare them with the current character i.e. string[i].
• If there is a mismatch then the string is not a palindrome. If all the elements match then the string is a palindrome.

Below is the implementation of the above approach:

## C++

 `// C++ implementation of the approach``#include ``using` `namespace` `std;` `// Function that returns true``// if string is a palindrome``bool` `isPalindrome(string s)``{``    ``int` `length = s.size();` `    ``// Creating a Stack``    ``stack<``char``> st;` `    ``// Finding the mid``    ``int` `i, mid = length / 2;` `    ``for` `(i = 0; i < mid; i++) {``        ``st.push(s[i]);``    ``}` `    ``// Checking if the length of the string``    ``// is odd, if odd then neglect the``    ``// middle character``    ``if` `(length % 2 != 0) {``        ``i++;``    ``}``  ` `    ``char` `ele;``    ``// While not the end of the string``    ``while` `(s[i] != ``'\0'``)``    ``{``         ``ele = st.top();``         ``st.pop();` `    ``// If the characters differ then the``    ``// given string is not a palindrome``    ``if` `(ele != s[i])``        ``return` `false``;``        ``i++;``    ``}` `return` `true``;``}` `// Driver code``int` `main()``{``    ``string s = ``"madam"``;` `    ``if` `(isPalindrome(s)) {``        ``cout << ``"Yes"``;``    ``}``    ``else` `{``        ``cout << ``"No"``;``    ``}` `    ``return` `0;``}` `// This Code is Contributed by Harshit Srivastava`

## C

 `// C implementation of the approach``#include ``#include ``#include ``#include ` `char``* stack;``int` `top = -1;` `// push function``void` `push(``char` `ele)``{``    ``stack[++top] = ele;``}` `// pop function``char` `pop()``{``    ``return` `stack[top--];``}` `// Function that returns 1``// if str is a palindrome``int` `isPalindrome(``char` `str[])``{``    ``int` `length = ``strlen``(str);` `    ``// Allocating the memory for the stack``    ``stack = (``char``*)``malloc``(length * ``sizeof``(``char``));` `    ``// Finding the mid``    ``int` `i, mid = length / 2;` `    ``for` `(i = 0; i < mid; i++) {``        ``push(str[i]);``    ``}` `    ``// Checking if the length of the string``    ``// is odd, if odd then neglect the``    ``// middle character``    ``if` `(length % 2 != 0) {``        ``i++;``    ``}` `    ``// While not the end of the string``    ``while` `(str[i] != ``'\0'``) {``        ``char` `ele = pop();` `        ``// If the characters differ then the``        ``// given string is not a palindrome``        ``if` `(ele != str[i])``            ``return` `0;``        ``i++;``    ``}` `    ``return` `1;``}` `// Driver code``int` `main()``{``    ``char` `str[] = ``"madam"``;` `    ``if` `(isPalindrome(str)) {``        ``printf``(``"Yes"``);``    ``}``    ``else` `{``        ``printf``(``"No"``);``    ``}` `    ``return` `0;``}`

## Java

 `// Java implementation of the approach``class` `GFG``{``static` `char` `[]stack;``static` `int` `top = -``1``;` `// push function``static` `void` `push(``char` `ele)``{``    ``stack[++top] = ele;``}` `// pop function``static` `char` `pop()``{``    ``return` `stack[top--];``}` `// Function that returns 1``// if str is a palindrome``static` `int` `isPalindrome(``char` `str[])``{``    ``int` `length = str.length;` `    ``// Allocating the memory for the stack``    ``stack = ``new` `char``[length * ``4``];` `    ``// Finding the mid``    ``int` `i, mid = length / ``2``;` `    ``for` `(i = ``0``; i < mid; i++) ``    ``{``        ``push(str[i]);``    ``}` `    ``// Checking if the length of the String``    ``// is odd, if odd then neglect the``    ``// middle character``    ``if` `(length % ``2` `!= ``0``) ``    ``{``        ``i++;``    ``}` `    ``// While not the end of the String``    ``while` `(i < length) ``    ``{``        ``char` `ele = pop();` `        ``// If the characters differ then the``        ``// given String is not a palindrome``        ``if` `(ele != str[i])``            ``return` `0``;``        ``i++;``    ``}` `    ``return` `1``;``}` `// Driver code``public` `static` `void` `main(String[] args)``{``    ``char` `str[] = ``"madam"``.toCharArray();` `    ``if` `(isPalindrome(str) == ``1``) ``    ``{``        ``System.out.printf(``"Yes"``);``    ``}``    ``else``    ``{``        ``System.out.printf(``"No"``);``    ``}``}``}` `// This code is contributed by PrinciRaj1992`

## Python3

 `# Python3 implementation of the approach``stack ``=` `[]``top ``=` `-``1` `# push function``def` `push(ele: ``str``):``    ``global` `top``    ``top ``+``=` `1``    ``stack[top] ``=` `ele` `# pop function``def` `pop():``    ``global` `top``    ``ele ``=` `stack[top]``    ``top ``-``=` `1``    ``return` `ele` `# Function that returns 1``# if str is a palindrome``def` `isPalindrome(string: ``str``) ``-``> ``bool``:``    ``global` `stack``    ``length ``=` `len``(string)` `    ``# Allocating the memory for the stack``    ``stack ``=` `[``'0'``] ``*` `(length ``+` `1``)` `    ``# Finding the mid``    ``mid ``=` `length ``/``/` `2``    ``i ``=` `0``    ``while` `i < mid:``        ``push(string[i])``        ``i ``+``=` `1` `    ``# Checking if the length of the string``    ``# is odd, if odd then neglect the``    ``# middle character``    ``if` `length ``%` `2` `!``=` `0``:``        ``i ``+``=` `1` `    ``# While not the end of the string``    ``while` `i < length:``        ``ele ``=` `pop()` `        ``# If the characters differ then the``        ``# given string is not a palindrome``        ``if` `ele !``=` `string[i]:``            ``return` `False``        ``i ``+``=` `1``    ``return` `True` `# Driver Code``if` `__name__ ``=``=` `"__main__"``:` `    ``string ``=` `"madam"` `    ``if` `isPalindrome(string):``        ``print``(``"Yes"``)``    ``else``:``        ``print``(``"No"``)` `# This code is contributed by``# sanjeev2552`

## C#

 `// C# implementation of the approach``using` `System;` `class` `GFG``{` `static` `char` `[]stack;``static` `int` `top = -1;` `// push function``static` `void` `push(``char` `ele)``{``    ``stack[++top] = ele;``}` `// pop function``static` `char` `pop()``{``    ``return` `stack[top--];``}` `// Function that returns 1``// if str is a palindrome``static` `int` `isPalindrome(``char` `[]str)``{``    ``int` `length = str.Length;` `    ``// Allocating the memory for the stack``    ``stack = ``new` `char``[length * 4];` `    ``// Finding the mid``    ``int` `i, mid = length / 2;` `    ``for` `(i = 0; i < mid; i++) ``    ``{``        ``push(str[i]);``    ``}` `    ``// Checking if the length of the String``    ``// is odd, if odd then neglect the``    ``// middle character``    ``if` `(length % 2 != 0) ``    ``{``        ``i++;``    ``}` `    ``// While not the end of the String``    ``while` `(i < length) ``    ``{``        ``char` `ele = pop();` `        ``// If the characters differ then the``        ``// given String is not a palindrome``        ``if` `(ele != str[i])``            ``return` `0;``        ``i++;``    ``}``    ``return` `1;``}` `// Driver code``public` `static` `void` `Main(String[] args)``{``    ``char` `[]str = ``"madam"``.ToCharArray();` `    ``if` `(isPalindrome(str) == 1) ``    ``{``        ``Console.Write(``"Yes"``);``    ``}``    ``else``    ``{``        ``Console.Write(``"No"``);``    ``}``}``}` `// This code is contributed by 29AjayKumar`

## Javascript

 ``

Output:
`Yes`

Time Complexity: O(N).
Auxiliary Space: O(N).

Previous
Next