Code-Alongs - Web Unit 2 Sprint 8
Code-Along: Palindrome Checker
In this code-along, you'll build a simple palindrome checker to practice string manipulation.
What Is a Palindrome?
A palindrome is a word, phrase, number, or other sequence of characters that reads the same forward and backward, ignoring spaces, punctuation, and capitalization.
Examples of palindromes include:
- "racecar"
- "A man, a plan, a canal, Panama"
- "Madam, I'm Adam"
- "Was it a car or a cat I saw?"
Palindrome Checking Algorithm
To check if a string is a palindrome, we need to:
- Remove all non-alphanumeric characters (spaces, punctuation, etc.)
- Convert all characters to lowercase
- Compare the string with its reverse
Here's a step-by-step implementation of a palindrome checker in JavaScript:
function isPalindrome(str) {
// Step 1: Remove non-alphanumeric characters and convert to lowercase
const cleanStr = str.replace(/[^a-zA-Z0-9]/g, '').toLowerCase();
// Step 2: Compare with reverse
const reversedStr = cleanStr.split('').reverse().join('');
// Step 3: Return true if the string is the same as its reverse
return cleanStr === reversedStr;
}
// Test the function
console.log(isPalindrome("racecar")); // true
console.log(isPalindrome("A man, a plan, a canal, Panama")); // true
console.log(isPalindrome("hello")); // false
Alternative Implementation: Two-Pointer Approach
Another common approach is to use two pointers, one starting from the beginning and one from the end of the string:
function isPalindromePointers(str) {
// Step 1: Remove non-alphanumeric characters and convert to lowercase
const cleanStr = str.replace(/[^a-zA-Z0-9]/g, '').toLowerCase();
// Step 2: Use two pointers to compare characters
let left = 0;
let right = cleanStr.length - 1;
while (left < right) {
if (cleanStr[left] !== cleanStr[right]) {
return false;
}
left++;
right--;
}
return true;
}
// Test the function
console.log(isPalindromePointers("racecar")); // true
console.log(isPalindromePointers("A man, a plan, a canal, Panama")); // true
console.log(isPalindromePointers("hello")); // false