Leetcode Top Interview ✨
GithubLinkedinXOfficial Website
  • Leetcode Top Interview 🎯
  • Guide to Calculating Algorithm Complexity 🚀
  • Topic 1 Array - String
    • 88. Merge Sorted Arrays 🧩
    • 27. Remove Element 🧹
    • 26. Remove Duplicates from Sorted Array 🚫
    • 80. Remove Duplicates from Sorted Array II 🚫🚫
    • 169. Majority Element 👑
    • 189. Rotate Array 🔄
    • 121. Best Time to Buy and Sell Stock 📈
    • 122. Best Time to Buy and Sell Stock II 📈💰
    • 55. Jump Game 🏃‍♂️
    • 45. Jump Game II 🏃‍♂️
    • 274. H-Index 📊
    • 380. Insert Delete GetRandom O(1) 🎲
    • 238. Product of Array Except Self 🔄
    • 134. Gas Station ⛽
    • 135. Candy 🍬
    • 42. Trapping Rain Water 🌧️
    • 13. Roman to Integer 🔢
    • 018 Integer to Roman
    • 58. Length of Last Word 🔠
    • 14. Longest Common Prefix 🌱
    • 151. Reverse Words in a String 🔄
    • 6. Zigzag Conversion 🔀
    • 28. Find the Index of the First Occurrence in a String 🔄
    • 68. Text Justification 🔄
  • Topic 2 Two Pointers
    • 125. Valid Palindrome 🚦
    • 392. Is Subsequence 📏
    • 167. Two Sum II - Input Array Is Sorted 🔍
    • 11. Container With Most Water 🏞️
    • 15. 3Sum 🌐
  • Topic 3 Sliding Window
    • 209. Minimum Size Subarray Sum 🌐
    • 3. Longest Substring Without Repeating Characters 🌐
    • 30. Substring with Concatenation of All Words 🌐
    • 76. Minimum Window Substring 🌐
  • Topic 4 Matrix
    • 36. Valid Sudoku 🌐
    • 54. Spiral Matrix 🌐
    • 48. Rotate Image 🔄
    • 73. Set Matrix Zeroes
    • 289. Game of Life 🖼️
  • Topic 5 Hashmap
    • 383. Ransom Note 🔍
    • 205. Isomorphic Strings 🔍
    • 290. Word Pattern 🧩
    • 242. Valid Anagram 🎢
    • 49. Group Anagrams 🤹‍♂️
    • 1. Two Sum 🔍
    • 202. Happy Number 🤩
    • 219. Contains Duplicate II 🔍
    • 128. Longest Consecutive Sequence 🔍
  • Topic 6 Intervals
    • 228. Summary Ranges 📊
    • 56. Merge Intervals 🔀
    • 57. Insert Interval 🆕
    • 452. Minimum Number of Arrows to Burst Balloons 🎈
  • Topic 7 Stack
    • 20. Valid Parentheses 🔍
    • 71. Simplify Path 🗺️
    • 155. Min Stack 🗃️
    • 150. Evaluate Reverse Polish Notation 🧠💻
    • 224. Basic Calculator 🧮
  • Topic 8 Linked List
    • 141. Linked List Cycle 🔁
    • 2. Add Two Numbers 🔢
    • 21. Merge Two Sorted Lists 🔗
    • 138. Copy List with Random Pointer 🔗
    • 92. Reverse Linked List II 🔄
      • Let’s explain step by step 🐇
    • 25. Reverse Nodes in k-Group 🔄
    • 19. Remove Nth Node From End of List 🗑️
    • 82. Remove Duplicates from Sorted List II ❌🔢
    • 61. Rotate List 🔄
    • 86. Partition List 🔗
    • 146. LRU Cache 🔗
  • Topic 9 Binary Tree General
    • 104. Maximum Depth of Binary Tree 🔗
    • 100. Same Tree 🔗
    • 226. Invert Binary Tree 🔗
    • 101. Symmetric Tree 🔗
    • 105. Construct Binary Tree from Preorder and Inorder Traversal 🔗
    • 106. Construct Binary Tree from Inorder and Postorder Traversal 🔗
    • 117. Populating Next Right Pointers in Each Node II 🔗
    • 114. Flatten Binary Tree to Linked List 🔗
    • 112. Path Sum 🔗
    • 129. Sum Root to Leaf Numbers 🔗
      • What_is_DFS
    • 124. Binary Tree Maximum Path Sum 🔗
Powered by GitBook
On this page
  • Description 📋
  • Examples 🌟
  • Constraints ⚙️
  • Solution 💡
  • Time Complexity ⏳
  • Space Complexity 💾
  • Java Implementation
  • Time Complexity ⏳
  • Space Complexity 💾

Was this helpful?

  1. Topic 2 Two Pointers

125. Valid Palindrome 🚦

PreviousTopic 2 Two PointersNext392. Is Subsequence 📏

Last updated 6 months ago

Was this helpful?

Difficulty: Easy - Tags: Two Pointers, String, 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.

Examples 🌟

Example 1:

Input:

s = "A man, a plan, a canal: Panama"

Output:

true

Explanation: After removing non-alphanumeric characters and converting to lowercase, we get "amanaplanacanalpanama", which is a palindrome.

Example 2:

Input:

s = "race a car"

Output:

false

Explanation: After preprocessing, "raceacar" is not a palindrome.

Example 3:

Input:

s = " "

Output:

true

Explanation: An empty string is a palindrome by definition, as it reads the same forward and backward.

Constraints ⚙️

  • 1 <= s.length <= 2 * 10^5

  • s consists only of printable ASCII characters.

Solution 💡

To determine if s is a palindrome, we can follow these steps:

  1. Filter Non-Alphanumeric Characters: We convert s to lowercase and keep only alphanumeric characters.

  2. Use Two Pointers: Set one pointer at the beginning (left) and another at the end (right) of the filtered string.

  3. Compare Characters: Move pointers inward, comparing characters at each position. If any pair of characters doesn’t match, return false.

  4. Return true if all characters match as the pointers converge or pass each other.

Time Complexity ⏳

  • O(n) where n is the length of the string. We scan the string twice (once for filtering and once for checking), which is linear.

Space Complexity 💾

  • O(n) for storing the filtered string.

Java Implementation

public class Solution {
    public boolean isPalindrome(String s) {
        // Step 1: Filter non-alphanumeric characters and convert to lowercase
        StringBuilder filteredStr = new StringBuilder();
        for (char c : s.toCharArray()) {
            if (Character.isLetterOrDigit(c)) {
                filteredStr.append(Character.toLowerCase(c));
            }
        }

        // Step 2: Use two-pointer technique
        int left = 0, right = filteredStr.length() - 1;
        while (left < right) {
            if (filteredStr.charAt(left) != filteredStr.charAt(right)) {
                return false; // Not a palindrome
            }
            left++;
            right--;
        }

        return true; // String is a palindrome
    }
}

Time Complexity ⏳

  • O(n): We go through each character once to filter and another pass to check, making it overall linear time complexity.

Space Complexity 💾

  • O(n): Additional space for storing the filtered alphanumeric characters.

You can find the full solution .

LeetCode Problem Link
here