Palindrome checking in Java

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.

Leave a Reply