Two Ways to Check for Palindromes in JavaScript


This article is based on Free Code Camp Basic Algorithm Scripting “Check for Palindromes”.
A palindrome is a word, phrase, number, or other sequence of characters which reads the same backward or forward. The word “palindrome” was first coined by the English playwright Ben Jonson in the 17th century, from the Greek roots palin (“again”) and dromos (“way, direction”). — src. Wikipedia
In this article, I’m going to explain two approaches, first with built-in functions and second using a for loop.
Algorithm Challenge
Return true if the given string is a palindrome. Otherwise, return false.
A palindrome is a word or sentence that’s spelled the same way both forward and backward, ignoring punctuation, case, and spacing.
Note. You’ll need to remove all non-alphanumeric characters (punctuation, spaces and symbols) and turn everything lower case in order to check for palindromes.
We’ll pass strings with varying formats, such as “racecar”, “RaceCar”, and “race CAR” among others.
Provided test cases
- palindrome(“race car”) should return true
- palindrome(“not a palindrome”) should return false
- palindrome(“A man, a plan, a canal. Panama”) should return true
- palindrome(“never odd or even”) should return true
- palindrome(“nope”) should return false
- palindrome(“almostomla”) should return false
- palindrome(“My age is 0, 0 si ega ym.”) should return true
- palindrome(“1 eye for of 1 eye.”) should return false
- palindrome(“0_0 (: /-\ :) 0–0”) should return true
Which Regular Expression will we need to pass the last test case?
Regular expressions are patterns used to match character combinations in strings.
When the search for a match requires something more than a direct match, the pattern includes special characters.
To pass the last test case, we can use two Regular Expressions:
/[^A-Za-z0–9]/g or
/[\W_]/g
\W removes all non-alphanumeric characters:
- \W matches any non-word character
- \W is equivalent to [^A-Za-z0–9_]
- \W matches anything that is not enclosed in the brackets
What does that mean?
[^A-Z] matches anything that is not enclosed between A and Z
[^a-z] matches anything that is not enclosed between a and z
[^0-9] matches anything that is not enclosed between 0 and 9
[^_] matches anything that does not enclose _
But in our test case, we need palindrome(“0_0 (: /-\ :) 0–0”) to return true, which means “_(: /-\ :)–” has to be matched.
We will need to add “_” to pass this specific test case.
We now have “\W_”
We will also need to add the g flag for global search.
We finally have “/[\W_]/g”
/[\W_]/g was used for pure demonstrative purpose to show how RegExp works. /[^A-Za-z0–9]/g is the easiest RegExp to choose.
1. Check for Palindromes With Built-In Functions
For this solution, we will use several methods:
- The toLowerCase() method to return the calling string value converted to lowercase.
- The replace() method to return a new string with some or all matches of a pattern replaced by a replacement. We will use one of the RegExp we just created earlier.
- The split() method splits a String object into an array of strings by separating the string into sub strings.
- The reverse() method reverses an array in place. The first array element becomes the last and the last becomes the first.
- The join() method joins all elements of an array into a string.
Without comments:
2. Check for Palindromes With a FOR loop
Half-indexing (len/2) has benefits when processing large strings. We check the end from each part and divide the number of iterations inside the FOR loop by two.
Without comments:
“How to Solve FCC Algorithms” is a series of articles on the Free Code Camp Algorithm Challenges where I try to propose several solutions and explain step by step what happens behind the hood.
- Three Ways to Reverse a String in JavaScript
- Three Ways to Factorialize a Number in JavaScript
- Three Ways to Find the Longest Word in a String in JavaScript
- Three Ways to Title Case a Sentence in JavaScript
If you have your own solution or any suggestions, share them below in the comments.
Or you can follow me on Medium, Twitter, Github and LinkedIn, right after you click the green heart below ;-)
#StayCurious, #KeepOnHacking & #MakeItHappen!