Let’s go over Palindrome checking in Java. A palindrome is a string, number, or sequence that reads the same forward and backward, e.g., "madam"
or "12321"
.
There are multiple ways to check for a palindrome. I’ll cover the common approaches.
1️⃣ Using StringBuilder
Reverse Method
public class PalindromeCheck {
public static boolean isPalindrome(String str) {
// Remove spaces and convert to lowercase
str = str.replaceAll("\\s", "").toLowerCase();
String reversed = new StringBuilder(str).reverse().toString();
return str.equals(reversed);
}
public static void main(String[] args) {
String str = "Madam";
if (isPalindrome(str))
System.out.println(str + " is a palindrome.");
else
System.out.println(str + " is not a palindrome.");
}
}
Output:
Madam is a palindrome.
Using Two Pointers (Efficient)
public class PalindromeCheck {
public static boolean isPalindrome(String str) {
str = str.replaceAll("\\s", "").toLowerCase();
int left = 0;
int right = str.length() - 1;
while (left < right) {
if (str.charAt(left) != str.charAt(right)) {
return false;
}
left++;
right--;
}
return true;
}
public static void main(String[] args) {
String str = "Race car";
if (isPalindrome(str))
System.out.println(str + " is a palindrome.");
else
System.out.println(str + " is not a palindrome.");
}
}
Output:
Race car is a palindrome.
Recursive Approach
public class PalindromeCheck {
public static boolean isPalindrome(String str) {
str = str.replaceAll("\\s", "").toLowerCase();
return checkPalindrome(str, 0, str.length() - 1);
}
private static boolean checkPalindrome(String str, int left, int right) {
if (left >= right) return true; // Base case
if (str.charAt(left) != str.charAt(right)) return false;
return checkPalindrome(str, left + 1, right - 1);
}
public static void main(String[] args) {
String str = "Level";
if (isPalindrome(str))
System.out.println(str + " is a palindrome.");
else
System.out.println(str + " is not a palindrome.");
}
}
Notes:
- Two-pointer method is most efficient: O(n) time, O(1) space.
- Using
StringBuilder.reverse()
is simpler, but creates a new string (extra memory). - Recursive method is elegant but can cause stack overflow for very long strings.
- Always normalize strings: remove spaces, punctuation, and convert to lowercase for real-world checks.