Given string str, the task is to find whether the given string is a palindrome or not using a stack.
Examples:
Input: str = “neveropen”
Output: No
Input: str = “madam”
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 <bits/stdc++.h>using namespace std;// Function that returns true// if string is a palindromebool 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 codeint 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 <malloc.h>#include <stdio.h>#include <stdlib.h>#include <string.h>char* stack;int top = -1;// push functionvoid push(char ele){ stack[++top] = ele;}// pop functionchar pop(){ return stack[top--];}// Function that returns 1// if str is a palindromeint 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 codeint main(){ char str[] = "madam"; if (isPalindrome(str)) { printf("Yes"); } else { printf("No"); } return 0;} |
Java
// Java implementation of the approachclass GFG{static char []stack;static int top = -1;// push functionstatic void push(char ele){ stack[++top] = ele;}// pop functionstatic char pop(){ return stack[top--];}// Function that returns 1// if str is a palindromestatic 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 codepublic 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 approachstack = []top = -1# push functiondef push(ele: str): global top top += 1 stack[top] = ele# pop functiondef pop(): global top ele = stack[top] top -= 1 return ele# Function that returns 1# if str is a palindromedef 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 Codeif __name__ == "__main__": string = "madam" if isPalindrome(string): print("Yes") else: print("No")# This code is contributed by# sanjeev2552 |
C#
// C# implementation of the approachusing System;class GFG{static char []stack;static int top = -1;// push functionstatic void push(char ele){ stack[++top] = ele;}// pop functionstatic char pop(){ return stack[top--];}// Function that returns 1// if str is a palindromestatic 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 codepublic 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
<script>// Javascript implementation of the approach// Function that returns true// if string is a palindromefunction isPalindrome(s){ var length = s.length; // Creating a Stack var st = []; // Finding the mid var i, mid = parseInt(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++; } var ele; // While not the end of the string while (i != s.length) { ele = st[st.length-1]; st.pop(); // If the characters differ then the // given string is not a palindrome if (ele != s[i]) return false; i++; }return true;}// Driver codevar s = "madam";if (isPalindrome(s)) { document.write( "Yes");}else { document.write( "No");}</script> |
Yes
Time Complexity: O(N).
Auxiliary Space: O(N).
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!
