package com.thealgorithms.stacks; import java.util.LinkedList; /** * A class that implements a palindrome checker using a stack. * The stack is used to store the characters of the string, * which we will pop one-by-one to create the string in reverse. * * Reference: https://www.geeksforgeeks.org/check-whether-the-given-string-is-palindrome-using-stack/ */ public class PalindromeWithStack { private LinkedList stack; /** * Constructs an empty stack that stores characters. */ public PalindromeWithStack() { stack = new LinkedList(); } /** * Check if the string is a palindrome or not. * Convert all characters to lowercase and push them into a stack. * At the same time, build a string * Next, pop from the stack and build the reverse string * Finally, compare these two strings * * @param string The string to check if it is palindrome or not. */ public boolean checkPalindrome(String string) { // Create a StringBuilder to build the string from left to right StringBuilder stringBuilder = new StringBuilder(string.length()); // Convert all characters to lowercase String lowercase = string.toLowerCase(); // Iterate through the string for (int i = 0; i < lowercase.length(); ++i) { char c = lowercase.charAt(i); // Build the string from L->R stringBuilder.append(c); // Push to the stack stack.push(c); } // The stack contains the reverse order of the string StringBuilder reverseString = new StringBuilder(stack.size()); // Until the stack is not empty while (!stack.isEmpty()) { // Build the string from R->L reverseString.append(stack.pop()); } // Finally, compare the L->R string with the R->L string return reverseString.toString().equals(stringBuilder.toString()); } }