📖 Scenario: Imagine you are building a simple text checker that tells if a word or phrase reads the same forwards and backwards, ignoring spaces, punctuation, and letter case. This is useful in games, puzzles, or text analysis.
🎯 Goal: You will create a program that checks if a given string is a palindrome using the two-pointer technique. This means comparing characters from the start and end moving towards the center.
📋 What You'll Learn
Create a string variable named inputString with the exact value "A man, a plan, a canal: Panama".
Create a variable named left and set it to 0.
Create a variable named right and set it to inputString.length - 1.
Use a while loop that runs while left < right.
Inside the loop, skip non-alphanumeric characters by moving left forward and right backward.
Compare characters at left and right ignoring case.
If characters do not match, set a variable isPalindrome to false and break the loop.
If loop finishes without mismatch, isPalindrome should be true.
Print isPalindrome.
💡 Why This Matters
🌍 Real World
Checking palindromes is useful in text analysis, puzzles, and validating special strings like IDs or codes.
💼 Career
Understanding two-pointer techniques helps in coding interviews and solving string manipulation problems efficiently.
Progress0 / 4 steps
1
Create the input string
Create a string variable called inputString and set it to the exact value "A man, a plan, a canal: Panama".
DSA Javascript
Hint
Use const inputString = "A man, a plan, a canal: Panama"; to create the string.
2
Set up two pointers
Create a variable called left and set it to 0. Create another variable called right and set it to inputString.length - 1.
DSA Javascript
Hint
Use let left = 0; and let right = inputString.length - 1;.
3
Implement the two-pointer palindrome check
Create a variable called isPalindrome and set it to true. Use a while loop that runs while left < right. Inside the loop, skip non-alphanumeric characters by moving left forward and right backward. Compare characters at left and right ignoring case. If characters do not match, set isPalindrome to false and break the loop. Otherwise, move left forward and right backward.
DSA Javascript
Hint
Use while loops to skip non-alphanumeric characters and compare characters ignoring case.
4
Print the result
Print the value of the variable isPalindrome.
DSA Javascript
Hint
Use console.log(isPalindrome); to print the result.
Practice
(1/5)
1. What is the main idea behind the two-pointer technique to check if a string is a palindrome?
easy
A. Use two pointers starting from both ends and move towards the center comparing characters
B. Reverse the string and compare it with the original string
C. Count the frequency of each character and check if all are even
D. Sort the string and check if it matches the original
Solution
Step 1: Understand the two-pointer approach
Two pointers start at the beginning and end of the string and move inward.
Step 2: Compare characters at pointers
If characters at both pointers match, move pointers closer; if not, string is not palindrome.
Final Answer:
Use two pointers starting from both ends and move towards the center comparing characters -> Option A
Quick Check:
Two-pointer technique = Use two pointers starting from both ends and move towards the center comparing characters [OK]
Hint: Compare characters from both ends moving inward [OK]
Common Mistakes:
Trying to reverse the string instead of using pointers
Checking only half the string without comparing both ends
Ignoring case or non-alphanumeric characters
2. Which of the following JavaScript code snippets correctly initializes two pointers for palindrome checking?
easy
A. let left = s.length - 1, right = 0;
B. let left = 1, right = s.length;
C. let left = s.length, right = 0;
D. let left = 0, right = s.length - 1;
Solution
Step 1: Identify correct pointer initialization
Left pointer should start at 0 (start of string), right pointer at last index (length - 1).
Step 2: Check each option
let left = 0, right = s.length - 1; correctly sets left=0 and right=s.length-1; others have incorrect indices.
Final Answer:
let left = 0, right = s.length - 1; -> Option D
Quick Check:
Start pointers at 0 and length-1 = let left = 0, right = s.length - 1; [OK]
Hint: Start left at 0 and right at length minus one [OK]
Common Mistakes:
Setting right pointer to s.length (out of bounds)
Swapping left and right pointers
Starting left pointer at 1 instead of 0
3. What will be the output of the following code?
function isPalindrome(s) {
let left = 0, right = s.length - 1;
while (left < right) {
if (s[left] !== s[right]) return false;
left++;
right--;
}
return true;
}
console.log(isPalindrome('racecar'));
console.log(isPalindrome('hello'));
medium
A. true false
B. false true
C. true true
D. false false
Solution
Step 1: Trace isPalindrome('racecar')
Characters match from both ends moving inward, so returns true.
Step 2: Trace isPalindrome('hello')
Characters at start and end differ ('h' vs 'o'), returns false immediately.
Final Answer:
true false -> Option A
Quick Check:
'racecar' palindrome = true, 'hello' not palindrome = false [OK]
Hint: Check characters from ends; stop at first mismatch [OK]
Common Mistakes:
Assuming 'hello' is palindrome
Not returning false immediately on mismatch
Confusing return values order
4. Find the error in this palindrome check code:
function isPalindrome(s) {
let left = 0, right = s.length;
while (left < right) {
if (s[left] !== s[right]) return false;
left++;
right--;
}
return true;
}
medium
A. The while condition should be left <= right
B. Left pointer should start at 1, not 0
C. Right pointer should start at s.length - 1, not s.length
D. The function should return false at the end
Solution
Step 1: Check pointer initialization
Right pointer is set to s.length, which is out of string index range (0 to length-1).
Step 2: Correct pointer initialization
Right pointer should be s.length - 1 to point to last character.
Final Answer:
Right pointer should start at s.length - 1, not s.length -> Option C
Quick Check:
Right pointer = length - 1 [OK]
Hint: Right pointer must be last index (length - 1) [OK]
Common Mistakes:
Using s.length as index causes undefined access
Changing left pointer start incorrectly
Incorrect loop condition causing infinite loop
5. Given the string s = 'A man, a plan, a canal: Panama', which modification to the two-pointer palindrome check is needed to correctly identify it as a palindrome?
hard
A. Reverse the string and compare directly
B. Ignore non-alphanumeric characters and compare characters case-insensitively
C. Only check the first half of the string
D. Convert the string to uppercase and compare characters directly
Solution
Step 1: Understand the input string
The string contains spaces, commas, and mixed cases which should be ignored for palindrome check.
Step 2: Modify two-pointer approach
Skip non-alphanumeric characters and compare characters in lowercase to handle case differences.
Final Answer:
Ignore non-alphanumeric characters and compare characters case-insensitively -> Option B
Quick Check:
Clean and lowercase string before comparing [OK]
Hint: Skip symbols and compare lowercase letters only [OK]
Common Mistakes:
Comparing characters without ignoring symbols
Not handling uppercase vs lowercase differences
Assuming direct comparison works on raw string
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.