Bird
0
0
DSA Cprogramming~10 mins

Valid Palindrome Two Pointer in DSA C - Execution Trace

Choose your learning style9 modes available
Concept Flow - Valid Palindrome Two Pointer
Start: left=0, right=length-1
Check if left < right?
NoDone: Palindrome
Yes
Is s[left
Yes
Is s[right
Yes
Compare s[left
left++, right--
Two pointers start at the string ends, move inward skipping non-alphanumeric characters, comparing characters case-insensitively until pointers cross or mismatch.
Execution Sample
DSA C
bool isPalindrome(char * s) {
    int left = 0, right = strlen(s) - 1;
    while (left < right) {
        if (!isalnum(s[left])) left++;
        else if (!isalnum(s[right])) right--;
        else if (tolower(s[left]) != tolower(s[right])) return false;
        else { left++; right--; }
    }
    return true;
}
Checks if a string is a palindrome ignoring non-alphanumeric characters and case using two pointers.
Execution Table
StepOperationleftrightCharacters ComparedActionVisual State
1Initialize pointers029-Start"A man, a plan, a canal: Panama"
2Check s[left] alnum029A vs aCompare (equal)"A man, a plan, a canal: Panama"
3Move pointers128-left++, right--"A man, a plan, a canal: Panama"
4Check s[left] alnum128 vs mleft not alnum, left++"A man, a plan, a canal: Panama"
5Check s[left] alnum228m vs mCompare (equal)"A man, a plan, a canal: Panama"
6Move pointers327-left++, right--"A man, a plan, a canal: Panama"
7Check s[left] alnum327a vs aCompare (equal)"A man, a plan, a canal: Panama"
8Move pointers426-left++, right--"A man, a plan, a canal: Panama"
9Check s[left] alnum426n vs nCompare (equal)"A man, a plan, a canal: Panama"
10Move pointers525-left++, right--"A man, a plan, a canal: Panama"
11Check s[left] alnum525, vs aleft not alnum, left++"A man, a plan, a canal: Panama"
12Check s[left] alnum625 vs aleft not alnum, left++"A man, a plan, a canal: Panama"
13Check s[left] alnum725a vs aCompare (equal)"A man, a plan, a canal: Panama"
14Move pointers824-left++, right--"A man, a plan, a canal: Panama"
15Check s[left] alnum824 vs Pleft not alnum, left++"A man, a plan, a canal: Panama"
16Check s[left] alnum924p vs PCompare (equal)"A man, a plan, a canal: Panama"
17Move pointers1023-left++, right--"A man, a plan, a canal: Panama"
18Check s[left] alnum1023l vs right not alnum, right--"A man, a plan, a canal: Panama"
19Check s[left] alnum1022l vs :right not alnum, right--"A man, a plan, a canal: Panama"
20Check s[left] alnum1021l vs lCompare (equal)"A man, a plan, a canal: Panama"
21Move pointers1120-left++, right--"A man, a plan, a canal: Panama"
22Check s[left] alnum1120a vs aCompare (equal)"A man, a plan, a canal: Panama"
23Move pointers1219-left++, right--"A man, a plan, a canal: Panama"
24Check s[left] alnum1219n vs nCompare (equal)"A man, a plan, a canal: Panama"
25Move pointers1318-left++, right--"A man, a plan, a canal: Panama"
26Check s[left] alnum1318, vs aleft not alnum, left++"A man, a plan, a canal: Panama"
💡 After step 26 (left=14, right=18), continue similarly: skip left ' ' at 14 to 15, compare 'a' vs 'a' at 15/18, move to 16/17; skip left ' ' at 16 to 17; left == right =17, all pairs matched, palindrome.
Variable Tracker
VariableStartAfter 1After 2After 3After 4After 5After 6After 7After 8After 9After 10Final
left012345789101017
right292828272625252424232117
Key Moments - 3 Insights
Why do we skip characters that are not alphanumeric?
Because the palindrome check ignores spaces, punctuation, and symbols. See steps 4, 11, 12, 15, and 26 in the execution_table where pointers move without comparison.
Why do we compare characters in lowercase?
To make the comparison case-insensitive. For example, 'A' and 'a' are considered equal as shown in step 2 and 'p' and 'P' in step 16.
When does the loop stop?
The loop stops when left pointer is no longer less than right pointer, meaning all pairs have been checked. This occurs when pointers meet or cross after final skips (left=17, right=17).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the value of 'left' after step 5?
A2
B3
C1
D5
💡 Hint
Check the 'left' column in execution_table row with Step 5.
At which step does the right pointer first move without comparison because of a non-alphanumeric character?
AStep 4
BStep 11
CStep 18
DStep 25
💡 Hint
Look for steps where 'Action' says 'right not alnum, right--' in execution_table.
If the input string was "race a car", at which step would the function return false?
AWhen comparing 'e' and 'a'
BWhen comparing 'r' and 'r'
CWhen comparing 'c' and 'c'
DWhen comparing 'a' and 'a'
💡 Hint
Think about which characters mismatch in the palindrome check and when the function returns false.
Concept Snapshot
Two pointers start at string ends
Skip non-alphanumeric chars
Compare characters case-insensitive
Move pointers inward if equal
Stop when pointers cross or mismatch
Full Transcript
This visualization shows how to check if a string is a palindrome using two pointers. We start with one pointer at the beginning and one at the end. We skip characters that are not letters or numbers. We compare characters ignoring case. If they match, we move both pointers inward. If they don't match, we stop and say it's not a palindrome. The process continues until the pointers cross, meaning the string is a palindrome.