DEV Community

Cover image for Solving Palindrome Check with JavaScript
Mohammed Awad
Mohammed Awad

Posted on

Solving Palindrome Check with JavaScript

Introduction:

Palindromes are fascinating word or number sequences that read the same forwards and backward. When it comes to programming, checking whether a given string is a palindrome or not is a common problem.

We'll

  1. discuss the problem,
  2. outline an approach,
  3. present a step-by-step solution, and provide example code using JavaScript.

Understanding the Problem:

Given a string, we need to determine whether it is a palindrome or not. A palindrome is a string that remains the same when its characters are reversed.

My approach for solving this problem:

Step 1: Remove non-alphanumeric characters
The first step is to clean the input string by removing any non-alphanumeric characters. We can achieve this by using a regular expression and the replace() method. The regular expression /[^a-z0-9]/g matches any character that is not a letter or a digit. We replace these characters with an empty string to obtain a clean version of the input string.

Step 2: Reverse the cleaned string
Next, we split the cleaned string into an array of individual characters using the split() method. We then reverse the order of the characters in the array using the reverse() method. Finally, we join the reversed characters back into a string using the join() method.

Step 3: Compare the cleaned string with the reversed string
In the final step, we compare the cleaned string obtained in Step 1 with the reversed string obtained in Step 2. If both strings are equal, it means the original input string is a palindrome. Otherwise, it is not.

My solution:

function palindrome(str) {
  const regex = /[^a-z0-9]/g;
  const cleanStr = str.toLowerCase().replace(regex, "");
  const reverseStr = cleanStr.split("").reverse().join("");
  const isPalindrome = cleanStr === reverseStr;

  return isPalindrome;
}

palindrome("My age is 0, 0 si ega ym.");
Enter fullscreen mode Exit fullscreen mode

If you have any questions or feedback, please feel free to share them in the comments. Thanks for being here!

About the Author:

Muhammad Awd is a passionate JavaScript developer with expertise in problem-solving and web development. He has a strong track record of delivering high-quality projects and enjoys tackling challenging coding puzzles. You can explore more of Muhammad's work and connect with him on his LinkedIn and GitHub.

Get in Touch:

If you have any JavaScript development opportunities, project collaborations, or would like to discuss any tech-related topics, feel free to reach out at muhmmad.awd@gmail.com. looks forward to hearing from you and exploring potential collaborations.

Top comments (5)

Collapse
 
tracygjg profile image
Tracy Gilmore • Edited

Another approach you might want to try in to use the at method with the negative index to check both ends at once using an Array.every method on a destructured section of the string. Might not be the most efficient but another approach from which to learn.

Collapse
 
bloodbaz profile image
Chris Walsh

I would say that there is a more efficient method... you don't need to reverse the string after breaking it into a char array - make a read-only span from the string using .AsSpan() and then loop from 0 to str.Length/2 (rounded down is fine) and compare chars at both ends. No further heap allocations required and I'm guessing 10 times faster. As always however, this is a balancing act between efficiency and readability. On the other hand, palandrome tests are primarily of academic interest rather than something you come across in the real world. πŸ‘

Collapse
 
tracygjg profile image
Tracy Gilmore

Happy to be proven wrong through a link into MDN but as far as I can tell AsSpan is not a String method in JS.

Collapse
 
xmohammedawad profile image
Mohammed Awad

never heard of this method before AsSpan(). thanks I will read about it, currently I'm learning how to write more efficient code so thanks

Collapse
 
xmohammedawad profile image
Mohammed Awad

If you have any questions or feedback, please feel free to share them in the comments. Thanks for being here!