Bird
Raised Fist0
DSA Cprogramming

Palindrome Detection in DSA C

Choose your learning style10 modes available
Mental Model
A palindrome reads the same forwards and backwards. We check if the first and last characters match, then move inward.
Analogy: Like checking if a word on a mirror looks the same from both sides, comparing letters from outside to inside.
string: h -> e -> l -> l -> o -> null
indexes: [0] -> [1] -> [2] -> [3] -> [4]
Dry Run Walkthrough
Input: string: 'radar'
Goal: Check if the string reads the same forwards and backwards
Step 1: Compare first and last characters 'r' and 'r'
'r' == 'r', continue checking inside
Why: Matching outer characters means palindrome is still possible
Step 2: Compare second and second last characters 'a' and 'a'
'a' == 'a', continue checking inside
Why: Matching next pair keeps palindrome condition
Step 3: Compare middle character 'd' with itself
Middle reached, no mismatch found
Why: Single middle character always matches itself
Result:
'r' -> 'a' -> 'd' -> 'a' -> 'r' -> null
Palindrome detected: true
Annotated Code
DSA C
#include <stdio.h>
#include <string.h>
#include <stdbool.h>

bool isPalindrome(char str[]) {
    int left = 0;
    int right = strlen(str) - 1;

    while (left < right) {
        if (str[left] != str[right]) {
            return false; // mismatch found, not palindrome
        }
        left++; // move inward from left
        right--; // move inward from right
    }
    return true; // all matched, palindrome
}

int main() {
    char input[] = "radar";
    if (isPalindrome(input)) {
        printf("%s -> Palindrome detected\n", input);
    } else {
        printf("%s -> Not a palindrome\n", input);
    }
    return 0;
}
while (left < right) {
loop to compare characters from outside moving inward
if (str[left] != str[right]) {
check for mismatch to stop early
left++;
advance left pointer inward
right--;
advance right pointer inward
return true;
all pairs matched, confirm palindrome
OutputSuccess
radar -> Palindrome detected
Complexity Analysis
Time: O(n) because we compare pairs from both ends once until the middle
Space: O(1) because we use only two pointers and no extra storage
vs Alternative: Compared to reversing the string and comparing, this method uses less space and stops early on mismatch
Edge Cases
empty string
returns true since empty string reads same forwards and backwards
DSA C
while (left < right) {
single character string
returns true because single character is palindrome
DSA C
while (left < right) {
string with mismatch at start
returns false immediately on first mismatch
DSA C
if (str[left] != str[right]) {
When to Use This Pattern
When you need to check if a sequence reads the same forwards and backwards, use two pointers moving inward to detect palindrome efficiently.
Common Mistakes
Mistake: Comparing characters without moving pointers inward
Fix: Increment left and decrement right pointers after each successful comparison
Mistake: Not stopping early on mismatch
Fix: Return false immediately when a mismatch is found
Summary
Checks if a string reads the same forwards and backwards.
Use when you want to verify palindrome property efficiently.
Compare characters from outside moving inward, stop early on mismatch.

Practice

(1/5)
1. What is a palindrome in the context of strings?
easy
A. A string that contains only vowels
B. A string that ends with a special character
C. A string with all unique characters
D. A string that reads the same forwards and backwards

Solution

  1. Step 1: Understand palindrome definition

    A palindrome is a word or phrase that reads the same forwards and backwards, ignoring spaces and punctuation.
  2. Step 2: Compare options with definition

    Only A string that reads the same forwards and backwards matches this definition exactly.
  3. Final Answer:

    A string that reads the same forwards and backwards -> Option D
  4. Quick Check:

    Palindrome = same forwards and backwards [OK]
Hint: Check if string equals its reverse [OK]
Common Mistakes:
  • Confusing palindrome with unique characters
  • Thinking palindrome means only vowels
  • Assuming palindrome ends with special characters
2. Which of the following C code snippets correctly checks if a string s is a palindrome?
easy
A. for (int i = 0; i < strlen(s)/2; i++) { if (s[i] != s[strlen(s)-1-i]) return 0; } return 1;
B. for (int i = 0; i < strlen(s); i++) { if (s[i] == s[i+1]) return 1; } return 0;
C. for (int i = 0; i < strlen(s); i++) { if (s[i] != s[i+1]) return 0; } return 1;
D. for (int i = 0; i < strlen(s)/2; i++) { if (s[i] == s[strlen(s)-1-i]) return 0; } return 1;

Solution

  1. Step 1: Analyze palindrome check logic

    We compare characters from start and end moving towards center. If any pair differs, string is not palindrome.
  2. Step 2: Match code with logic

    for (int i = 0; i < strlen(s)/2; i++) { if (s[i] != s[strlen(s)-1-i]) return 0; } return 1; correctly compares s[i] and s[length-1-i] for half the string length and returns 0 if mismatch found, else 1.
  3. Final Answer:

    for (int i = 0; i < strlen(s)/2; i++) { if (s[i] != s[strlen(s)-1-i]) return 0; } return 1; -> Option A
  4. Quick Check:

    Compare front and back chars for half length [OK]
Hint: Check characters from ends moving inward [OK]
Common Mistakes:
  • Comparing adjacent characters instead of opposite ends
  • Returning 1 too early inside loop
  • Incorrect loop range causing out-of-bounds
3. What will be the output of the following C code?
char s[] = "radar";
int i, flag = 1;
int n = strlen(s);
for (i = 0; i < n/2; i++) {
  if (s[i] != s[n - i - 1]) {
    flag = 0;
    break;
  }
}
printf("%d", flag);
medium
A. 0
B. 1
C. Compilation error
D. Undefined behavior

Solution

  1. Step 1: Understand the code logic

    The code checks if string "radar" is palindrome by comparing characters from start and end.
  2. Step 2: Trace the loop comparisons

    Characters match at all pairs: r-r, a-a, d-d (middle ignored). So flag remains 1.
  3. Final Answer:

    1 -> Option B
  4. Quick Check:

    "radar" is palindrome, flag = 1 [OK]
Hint: Check if string equals reverse, print 1 if yes [OK]
Common Mistakes:
  • Assuming flag is 0 for palindrome
  • Confusing loop range causing missed checks
  • Misreading string length calculation
4. Identify the error in this palindrome check code snippet:
int isPalindrome(char *s) {
  int n = strlen(s);
  for (int i = 0; i <= n/2; i++) {
    if (s[i] != s[n - i]) {
      return 0;
    }
  }
  return 1;
}
medium
A. Loop condition should be i < n/2, not i <= n/2
B. Function should return void instead of int
C. Index n - i should be n - i - 1 to avoid out-of-bounds
D. No error, code works correctly

Solution

  1. Step 1: Check array indexing in condition

    String indices go from 0 to n-1, so s[n - i] accesses out-of-bounds when i=0.
  2. Step 2: Correct index to n - i - 1

    Changing to s[n - i - 1] fixes indexing and prevents runtime error.
  3. Final Answer:

    Index n - i should be n - i - 1 to avoid out-of-bounds -> Option C
  4. Quick Check:

    Array index must be within 0 to n-1 [OK]
Hint: Remember last index is length - 1 [OK]
Common Mistakes:
  • Using wrong loop boundary causing extra iteration
  • Ignoring off-by-one in array indexing
  • Assuming function return type is incorrect
5. Given a string with mixed case and spaces, which approach correctly checks if it is a palindrome ignoring case and spaces?
char s[] = "A man a plan a canal Panama";
hard
A. Remove spaces and convert to lowercase, then check palindrome normally
B. Check palindrome directly without modifications
C. Only convert to lowercase, ignore spaces
D. Only remove spaces, ignore case

Solution

  1. Step 1: Normalize string by removing spaces and converting to lowercase

    Spaces and case differences affect palindrome check, so remove spaces and convert all letters to lowercase.
  2. Step 2: Perform palindrome check on normalized string

    After normalization, check if string reads same forwards and backwards.
  3. Final Answer:

    Remove spaces and convert to lowercase, then check palindrome normally -> Option A
  4. Quick Check:

    Normalize string before palindrome check [OK]
Hint: Clean string first: lowercase + no spaces [OK]
Common Mistakes:
  • Ignoring spaces causing false negatives
  • Ignoring case differences causing false negatives
  • Checking palindrome on raw string directly
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard