Bird
Raised Fist0
DSA C++programming~5 mins

Palindrome Detection in DSA C++ - Time & Space Complexity

Choose your learning style10 modes available
Time Complexity: Palindrome Detection
O(n)
Understanding Time Complexity

We want to know how the time to check if a word or phrase is a palindrome changes as the input gets longer.

How does the number of steps grow when the input size grows?

Scenario Under Consideration

Analyze the time complexity of the following code snippet.


bool isPalindrome(const std::string &s) {
    int left = 0;
    int right = s.length() - 1;
    while (left < right) {
        if (s[left] != s[right]) {
            return false;
        }
        left++;
        right--;
    }
    return true;
}
    

This code checks if a string reads the same forwards and backwards by comparing characters from both ends moving towards the center.

Identify Repeating Operations

Identify the loops, recursion, array traversals that repeat.

  • Primary operation: Comparing characters at positions from the start and end of the string.
  • How many times: Up to half the length of the string (n/2 times).
How Execution Grows With Input

As the string gets longer, the number of character comparisons grows roughly half as fast.

Input Size (n)Approx. Operations
105 comparisons
10050 comparisons
1000500 comparisons

Pattern observation: The number of steps grows linearly with input size, but only half as many comparisons are needed.

Final Time Complexity

Time Complexity: O(n)

This means the time to check a palindrome grows in direct proportion to the length of the string.

Common Mistake

[X] Wrong: "Checking a palindrome takes constant time because we only compare a few characters."

[OK] Correct: The number of comparisons depends on the string length; longer strings need more checks, so time grows with input size.

Interview Connect

Understanding how palindrome detection scales helps you explain your code clearly and shows you can analyze efficiency, a key skill in interviews.

Self-Check

"What if we changed the code to check only every other character? How would the time complexity change?"

Practice

(1/5)
1. What does a palindrome string mean in simple terms?
easy
A. A string that has all unique characters
B. A string that reads the same forwards and backwards
C. A string that contains only vowels
D. A string that ends with a special character

Solution

  1. Step 1: Understand palindrome definition

    A palindrome is a word or phrase that reads the same from left to right and right to left.
  2. Step 2: Compare options with definition

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

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

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

Solution

  1. Step 1: Analyze loop and index usage

    for (int i = 0; i < s.size() / 2; i++) if (s[i] != s[s.size() - i - 1]) return false; correctly loops till half the string and compares characters from start and end.
  2. Step 2: Check correctness of index calculations

    for (int i = 0; i < s.size() / 2; i++) if (s[i] != s[s.size() - i - 1]) return false; uses s.size() - i - 1 which is correct for zero-based indexing.
  3. Final Answer:

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

    Correct index and loop range = for (int i = 0; i < s.size() / 2; i++) if (s[i] != s[s.size() - i - 1]) return false; [OK]
Hint: Check characters from start and end up to middle [OK]
Common Mistakes:
  • Using wrong loop range (full length instead of half)
  • Incorrect index calculation causing out-of-range errors
  • Comparing adjacent characters instead of mirrored ones
3. What will be the output of the following C++ code?
std::string s = "racecar";
bool isPalindrome = true;
for (int i = 0; i < s.size() / 2; i++) {
  if (s[i] != s[s.size() - i - 1]) {
    isPalindrome = false;
    break;
  }
}
std::cout << (isPalindrome ? "Yes" : "No") << std::endl;
medium
A. Yes
B. No
C. Compilation error
D. Runtime error

Solution

  1. Step 1: Understand the string and loop

    The string "racecar" is a palindrome because it reads the same forwards and backwards.
  2. Step 2: Trace the loop comparisons

    The loop compares characters from start and end; all pairs match, so isPalindrome remains true.
  3. Final Answer:

    Yes -> Option A
  4. Quick Check:

    "racecar" is palindrome = Yes [OK]
Hint: Check mirrored characters; all match means palindrome [OK]
Common Mistakes:
  • Assuming "racecar" is not palindrome
  • Confusing output strings
  • Ignoring break statement in loop
4. Find the error in this palindrome check code snippet:
bool checkPalindrome(std::string s) {
  for (int i = 0; i <= s.size() / 2; i++) {
    if (s[i] != s[s.size() - i]) {
      return false;
    }
  }
  return true;
}
medium
A. Comparison should be s[i] == s[s.size() - i]
B. No error, code works fine
C. Function should return void instead of bool
D. End index should be s[s.size() - i - 1] instead of s[s.size() - i] to avoid out-of-range

Solution

  1. Step 1: Check loop range and indexing

    The end index s[s.size() - i] for i=0 accesses s[s.size()], causing out-of-range error.
  2. Step 2: Correct index calculation

    Change to s[s.size() - i - 1] for proper zero-based end index mirroring.
  3. Final Answer:

    End index should be s[s.size() - i - 1] instead of s[s.size() - i] to avoid out-of-range -> Option D
  4. Quick Check:

    End index = size - i - 1 [OK]
Hint: End index: s.size() - i - 1 [OK]
Common Mistakes:
  • Wrong end index s[size - i] causes out-of-bound access
  • Confusing equality and inequality in comparisons
  • Ignoring return type correctness
5. You want to check if a sentence is a palindrome ignoring spaces, punctuation, and case. Which approach is best?
hard
A. Only convert to lowercase and check palindrome
B. Check palindrome directly on original string without changes
C. Remove non-alphanumeric characters, convert to lowercase, then check palindrome
D. Reverse the string and compare without any preprocessing

Solution

  1. Step 1: Understand palindrome ignoring spaces and punctuation

    To ignore spaces and punctuation, remove all non-alphanumeric characters and convert to lowercase for uniform comparison.
  2. Step 2: Apply palindrome check on cleaned string

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

    Remove non-alphanumeric characters, convert to lowercase, then check palindrome -> Option C
  4. Quick Check:

    Clean string then check palindrome [OK]
Hint: Clean string first, then check palindrome [OK]
Common Mistakes:
  • Checking palindrome without cleaning string
  • Ignoring case differences
  • Assuming spaces and punctuation don't affect palindrome
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