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 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 <malloc.h> #include <stdio.h> #include <stdlib.h> #include <string.h> 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
<script> // Javascript implementation of the approach // Function that returns true // if string is a palindrome function 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 code var 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!