</>

Technology

Core Java

Difficulty

Beginner

Interview Question

How do you check if a string is a palindrome in Java?

Answer

Check if String is Palindrome

A palindrome reads the same forwards and backwards: "madam", "racecar", "level".

Method 1: Two-Pointer Approach (Optimal)

Java
public static boolean isPalindrome(String str) {
    if (str == null) return false;

    str = str.toLowerCase().replaceAll("[^a-z0-9]", "");  // ignore case + spaces

    int left = 0, right = str.length() - 1;
    while (left < right) {
        if (str.charAt(left) != str.charAt(right)) {
            return false;
        }
        left++;
        right--;
    }
    return true;
}

System.out.println(isPalindrome("madam"));          // true
System.out.println(isPalindrome("racecar"));        // true
System.out.println(isPalindrome("A man a plan a canal Panama")); // true (ignores spaces)
System.out.println(isPalindrome("Hello"));          // false

Method 2: Using StringBuilder.reverse()

Java
public static boolean isPalindromeReverse(String str) {
    if (str == null) return false;
    String clean = str.toLowerCase().replaceAll("\\s+", "");
    return clean.equals(new StringBuilder(clean).reverse().toString());
}

Method 3: Recursive

Java
public static boolean isPalindromeRecursive(String str) {
    if (str.length() <= 1) return true;
    if (str.charAt(0) != str.charAt(str.length() - 1)) return false;
    return isPalindromeRecursive(str.substring(1, str.length() - 1));
}

Method 4: Check Palindrome Number

Java
public static boolean isPalindromeNumber(int num) {
    if (num < 0) return false;
    String s = String.valueOf(num);
    return s.equals(new StringBuilder(s).reverse().toString());
}

System.out.println(isPalindromeNumber(121));   // true
System.out.println(isPalindromeNumber(1221));  // true
System.out.println(isPalindromeNumber(123));   // false

Comprehensive Test Cases

Java
@Test
public void testPalindrome() {
    // True cases
    assertTrue(isPalindrome("madam"));
    assertTrue(isPalindrome("racecar"));
    assertTrue(isPalindrome("level"));
    assertTrue(isPalindrome("A"));
    assertTrue(isPalindrome(""));

    // False cases
    assertFalse(isPalindrome("hello"));
    assertFalse(isPalindrome("java"));
    assertFalse(isPalindrome("selenium"));

    // Edge cases
    assertFalse(isPalindrome(null));
    assertTrue(isPalindrome("Madam"));  // case-insensitive
    assertTrue(isPalindrome("A man a plan a canal Panama"));  // with spaces
}

Find All Palindromes in a List

Java
List<String> words = Arrays.asList("madam", "hello", "racecar", "java", "level");

List<String> palindromes = words.stream()
    .filter(w -> isPalindrome(w))
    .collect(Collectors.toList());

System.out.println(palindromes); // [madam, racecar, level]

Follow AutomateQA

Related Topics