Skip to content
Leetcode
Esc
↑↓navigate↵open⌘Jpreview
On this page

125. Valid Palindrome

A phrase is a palindrome if, after converting all uppercase letters into lowercase letters and removing all non-alphanumeric characters, it reads the same forward and backward. Alphanumeric characters include letters and numbers

Two Pointers

Example 1:

  • Input: s = "A man, a plan, a canal: Panama"
  • Output: true
  • Explanation: "amanaplanacanalpanama" is a palindrome.

Example 2:

  • Input: s = "race a car"
  • Output: false
  • Explanation: "raceacar" is not a palindrome.

Example 3:

  • Input: s = " "
  • Output: true
  • Explanation: s is an empty string "" after removing non-alphanumeric characters. Since an empty string reads the same forward and backward, it is a palindrome.

Constraints:

  • 1 <= s.length <= 2 * 10^5
  • s consists only of printable ASCII characters.

Approach

Solution

/**
 * @param {string} s
 * @return {boolean}
 */
var isPalindrome = function(s) {
  let normal = s.replace(/[^a-zA-Z0-9]/g, "").toLowerCase()    
  let i = 0, j = normal.length - 1;

  while (i < j) {
    if(normal[i] !== normal[j]) {
      return false;
    }
    i++;
    j--;
  }
  return true;
};

Explanation

Last updated on September 24, 2026

Was this page helpful?