LeetCode 0125. Valid Palindrome Solution in Java, Python, C++, JavaScript, Go & Rust | Explanation + Code

CoderIndeed
0
0125. Valid Palindrome

Description

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.

Given a string s, return true if it is a palindrome, or false otherwise.

 

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 * 105
  • s consists only of printable ASCII characters.

Solutions

Solution 1: Two Pointers

We use two pointers i and j to point to the two ends of the string s, and then loop through the following process until i ≥ j:

  1. If s[i] is not a letter or a number, move the pointer i one step to the right and continue to the next loop.
  2. If s[j] is not a letter or a number, move the pointer j one step to the left and continue to the next loop.
  3. If the lowercase form of s[i] and s[j] are not equal, return false.
  4. Otherwise, move the pointer i one step to the right and the pointer j one step to the left, and continue to the next loop.

At the end of the loop, return true.

The time complexity is O(n), where n is the length of the string s. The space complexity is O(1).

PythonJavaC++GoTypeScriptRustJavaScriptC#PHP
class Solution: def isPalindrome(self, s: str) -> bool: i, j = 0, len(s) - 1 while i < j: if not s[i].isalnum(): i += 1 elif not s[j].isalnum(): j -= 1 elif s[i].lower() != s[j].lower(): return False else: i, j = i + 1, j - 1 return True(code-box)

Post a Comment

0Comments

Post a Comment (0)

#buttons=(Accept !) #days=(20)

Our website uses cookies to enhance your experience. Check Now
Accept !