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]
