Palindrome Checker (Alphanumeric Only)
Palindrome = อ่านจากหน้าหลังได้เหมือนกัน (Ignore Case, Non-alphanumeric)
ขั้นตอน
- Lowercase ทั้ง String
- ลบ Non-alphanumeric ด้วย Regex
/[\W_]/g(\W = Non-word, _ = Underscore) - Reverse String
- Compare กับ Original
Implementation
<script>
function palindrome(str) {
// Remove non-alphanumeric, lowercase
const cleaned = str.toLowerCase().replace(/[\W_]/g, '');
// Reverse
const reversed = cleaned.split('').reverse().join('');
// Compare
return cleaned === reversed;
}
console.log(palindrome('a929a*/(\';-=,.*')); // true
console.log(palindrome('A man, a plan, a canal: Panama')); // true
console.log(palindrome('race a car')); // false
console.log(palindrome('Madam')); // true
</script>
Regex Explained
\W= Non-word character (เทียบเท่า[^a-zA-Z0-9_])_= Underscore (เพราะ \W ไม่รวม _)g= Global (Replace All)- Alternative:
/[^a-zA-Z0-9]/g
Alternative: Two Pointers (O(1) Space)
function palindromeTwoPointer(str) {
const cleaned = str.toLowerCase().replace(/[\W_]/g, '');
let left = 0, right = cleaned.length - 1;
while (left < right) {
if (cleaned[left] !== cleaned[right]) return false;
left++;
right--;
}
return true;
}
Test Cases
| Input | Cleaned | Result |
|---|---|---|
| a929a*/(';-=,.* | a929a | true |
| A man, a plan, a canal: Panama | amanaplanacanalpanama | true |
| race a car | raceacar | false |
| Madam | madam | true |