📖 Scenario: 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 called a palindrome.For example, "Racecar" and "A man, a plan, a canal: Panama" are palindromes.
🎯 Goal: Build a program that uses two pointers to check if a given string is a valid palindrome.
📋 What You'll Learn
Create a string variable with the exact value "A man, a plan, a canal: Panama"
Create two integer variables called left and right to point to the start and end of the string
Use a while loop to move left and right pointers towards the center, skipping non-alphanumeric characters
Compare characters at left and right ignoring case
Print true if the string is a palindrome, otherwise false
💡 Why This Matters
🌍 Real World
Palindrome checking is useful in text processing, data validation, and coding interviews.
💼 Career
Understanding two-pointer techniques and string manipulation is important for software development and algorithm design.
Progress0 / 4 steps
1
Create the input string
Create a string variable called input with the exact value "A man, a plan, a canal: Panama"
DSA C#
Hint
Use string input = "A man, a plan, a canal: Panama"; to create the variable.
2
Initialize two pointers
Create two integer variables called left and right. Set left to 0 and right to input.Length - 1
DSA C#
Hint
Use int left = 0; and int right = input.Length - 1; to set the pointers.
3
Use two pointers to check palindrome
Write 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 they differ, break the loop. Otherwise, move left forward and right backward.
DSA C#
Hint
Use while (left < right) and char.IsLetterOrDigit to skip characters. Use char.ToLower to compare ignoring case.
4
Print the result
Print the value of the boolean variable isPalindrome using Console.WriteLine
DSA C#
Hint
Use Console.WriteLine(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. Sort the characters and check if the sorted string equals the original
B. Reverse the string and compare it with the original string
C. Count the frequency of each character and check if all counts are even
D. Use two pointers starting from both ends and move towards the center comparing characters
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 are equal, 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 D
Quick Check:
Two-pointer technique = Compare ends inward [OK]
Hint: Compare characters from both ends moving inward [OK]
Common Mistakes:
Reversing string instead of using pointers
Checking only half the string incorrectly
Ignoring case or non-alphanumeric characters
2. Which of the following C# code snippets correctly initializes two pointers for palindrome checking on string s?
easy
A. int left = 0, right = s.Length - 1;
B. int left = 1, right = s.Length;
C. int left = 0, right = s.Length;
D. int left = 1, right = s.Length - 1;
Solution
Step 1: Identify valid pointer initialization
Left pointer starts at 0 (first char), right pointer at s.Length - 1 (last char).
Step 2: Check each option
int left = 0, right = s.Length - 1; correctly sets left=0 and right=s.Length-1; others are off by one.
Final Answer:
int left = 0, right = s.Length - 1; -> Option A
Quick Check:
Pointers start at 0 and last index [OK]
Hint: Start left at 0 and right at length minus one [OK]
Common Mistakes:
Setting right pointer to s.Length (out of range)
Starting left pointer at 1 instead of 0
Confusing length with last index
3. What will be the output of the following C# code snippet?
string s = "A man, a plan, a canal: Panama";
bool IsPalindrome(string str) {
int left = 0, right = str.Length - 1;
while (left < right) {
if (!char.IsLetterOrDigit(str[left])) { left++; continue; }
if (!char.IsLetterOrDigit(str[right])) { right--; continue; }
if (char.ToLower(str[left]) != char.ToLower(str[right])) return false;
left++; right--;
}
return true;
}
Console.WriteLine(IsPalindrome(s));
medium
A. Runtime exception
B. True
C. Compilation error
D. False
Solution
Step 1: Understand the code logic
The code skips non-alphanumeric characters and compares letters ignoring case.
Step 2: Analyze the input string
"A man, a plan, a canal: Panama" is a famous palindrome ignoring spaces and punctuation.
Final Answer:
True -> Option B
Quick Check:
Ignoring punctuation and case, string is palindrome [OK]
Hint: Ignore non-letters and compare lowercase chars [OK]
Common Mistakes:
Not skipping non-alphanumeric characters
Comparing characters without case normalization
Assuming spaces affect palindrome check
4. Identify the bug in the following palindrome check code and select the fix:
bool IsPalindrome(string s) {
int left = 0, right = s.Length - 1;
while (left <= right) {
if (s[left] != s[right]) return false;
left++;
right--;
}
return true;
}
medium
A. Change while condition to left < right
B. Skip non-alphanumeric characters before comparing
C. All of the above
D. Add case-insensitive comparison using char.ToLower
Solution
Step 1: Check loop condition correctness
Using <= causes unnecessary comparison when left == right; < is better.
Step 2: Consider case and character filtering
Comparisons should ignore case and skip non-alphanumeric chars for valid palindrome check.
Step 3: Combine fixes
All suggested fixes improve correctness and handle common palindrome cases.
Final Answer:
All of the above -> Option C
Quick Check:
Loop, case, and filtering fixes needed [OK]
Hint: Check loop, case, and skip non-letters [OK]
Common Mistakes:
Using <= instead of < in loop
Ignoring case differences
Not skipping punctuation or spaces
5. Given the string "No lemon, no melon", which modification to the two-pointer palindrome check is necessary to correctly identify it as a palindrome?
hard
A. Convert characters to lowercase and skip non-alphanumeric characters during comparison
B. Only convert characters to lowercase without skipping any characters
C. Skip spaces only, but compare punctuation as is
D. Reverse the string and compare directly without any preprocessing
Solution
Step 1: Analyze the string content
"No lemon, no melon" contains spaces and punctuation that should be ignored.
Step 2: Determine necessary preprocessing
Lowercase conversion and skipping all non-alphanumeric characters ensures correct palindrome check.
Final Answer:
Convert characters to lowercase and skip non-alphanumeric characters during comparison -> Option A