Palindrome Check

Program to check if a number or string is palindrome

JavaScriptBeginner
JavaScript
// Palindrome: reads same forwards and backwards
// Examples: 121, "madam", "racecar"

// Method 1: String palindrome
function isPalindromeString(str) {
    str = str.toLowerCase().replace(/[^a-z0-9]/g, '');
    let reversed = str.split('').reverse().join('');
    return str === reversed;
}

console.log("madam:", isPalindromeString("madam"));
console.log("hello:", isPalindromeString("hello"));
console.log("A man a plan a canal Panama:", isPalindromeString("A man a plan a canal Panama"));

// Method 2: Number palindrome
function isPalindromeNumber(num) {
    let original = num;
    let reversed = 0;
    
    while (num > 0) {
        reversed = reversed * 10 + (num % 10);
        num = Math.floor(num / 10);
    }
    
    return original === reversed;
}

console.log("\nNumber palindrome:");
console.log("121:", isPalindromeNumber(121));
console.log("123:", isPalindromeNumber(123));
console.log("1221:", isPalindromeNumber(1221));

// Method 3: Two-pointer approach (efficient)
function isPalindromeTwoPointer(str) {
    str = str.toLowerCase().replace(/[^a-z0-9]/g, '');
    let left = 0;
    let right = str.length - 1;
    
    while (left < right) {
        if (str[left] !== str[right]) {
            return false;
        }
        left++;
        right--;
    }
    return true;
}

console.log("\nTwo-pointer approach:");
console.log("racecar:", isPalindromeTwoPointer("racecar"));
console.log("hello:", isPalindromeTwoPointer("hello"));

// Method 4: Recursive approach
function isPalindromeRecursive(str) {
    str = str.toLowerCase().replace(/[^a-z0-9]/g, '');
    
    if (str.length <= 1) return true;
    if (str[0] !== str[str.length - 1]) return false;
    
    return isPalindromeRecursive(str.slice(1, -1));
}

console.log("\nRecursive approach:");
console.log("level:", isPalindromeRecursive("level"));
console.log("world:", isPalindromeRecursive("world"));

Output

madam: true
hello: false
A man a plan a canal Panama: true

Number palindrome:
121: true
123: false
1221: true

Two-pointer approach:
racecar: true
hello: false

Recursive approach:
level: true
world: false

This program demonstrates different methods to check if a value is a palindrome.

Palindrome Definition

A palindrome reads the same forwards and backwards:

  • Numbers: 121, 1221, 1331
  • Strings: "madam", "racecar", "level"
  • Phrases: "A man a plan a canal Panama"

Method 1: String Reversal

Compare original with reversed:

javascript
let reversed = str.split('').reverse().join('');
return str === reversed;

String Cleaning:

  • toLowerCase(): Case-insensitive
  • replace(/[^a-z0-9]/g, ''): Remove non-alphanumeric

Method 2: Number Palindrome

Reverse number and compare:

javascript
let reversed = 0;
while (num > 0) {
    reversed = reversed * 10 + (num % 10);
    num = Math.floor(num / 10);
}
return original === reversed;

Method 3: Two-Pointer Approach

Compare characters from both ends:

javascript
let left = 0;
let right = str.length - 1;
while (left < right) {
    if (str[left] !== str[right]) return false;
    left++;
    right--;
}
return true;

Pros:

  • O(n) time, O(1) space
  • No string reversal needed
  • Most efficient

Method 4: Recursive

Check first and last, recurse on middle:

javascript
if (str[0] !== str[str.length - 1]) return false;
return isPalindromeRecursive(str.slice(1, -1));

String Methods:

  • slice(1, -1): Remove first and last character
  • charAt(0): Get first character
  • length: String length

Time Complexity:

  • Reversal: O(n)
  • Two-pointer: O(n) - Best!
  • Recursive: O(n)

When to Use:

  • Reversal: Simple, readable

  • Two-pointer: Most efficient

  • Recursive: Learning recursion