mirror of
https://github.com/TheAlgorithms/Java.git
synced 2025-12-19 07:00:35 +08:00
58 lines
1.9 KiB
Java
58 lines
1.9 KiB
Java
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<Character> stack;
|
|
|
|
/**
|
|
* Constructs an empty stack that stores characters.
|
|
*/
|
|
public PalindromeWithStack() {
|
|
stack = new LinkedList<Character>();
|
|
}
|
|
|
|
/**
|
|
* 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());
|
|
}
|
|
}
|