Bird
Raised Fist0
DSA C++programming~5 mins

String Reversal Approaches in DSA C++ - Time & Space Complexity

Choose your learning style10 modes available
Time Complexity: String Reversal Approaches
O(n)
Understanding Time Complexity

We want to understand how the time needed to reverse a string changes as the string gets longer.

How does the number of steps grow when the input string size increases?

Scenario Under Consideration

Analyze the time complexity of the following code snippet.


void reverseString(std::string &s) {
    int left = 0, right = s.length() - 1;
    while (left < right) {
        std::swap(s[left], s[right]);
        left++;
        right--;
    }
}
    

This code reverses a string by swapping characters from the start and end moving towards the center.

Identify Repeating Operations

Identify the loops, recursion, array traversals that repeat.

  • Primary operation: Swapping two characters in the string.
  • How many times: About half the length of the string (n/2 times).
How Execution Grows With Input

As the string gets longer, the number of swaps grows roughly in direct proportion to its length.

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

Pattern observation: Doubling the string length roughly doubles the number of swaps.

Final Time Complexity

Time Complexity: O(n)

This means the time to reverse the string grows linearly with the string length.

Common Mistake

[X] Wrong: "Reversing a string takes quadratic time because of swapping characters inside a loop."

[OK] Correct: Each swap is a constant time operation, and the loop runs only about n/2 times, so total time grows linearly, not quadratically.

Interview Connect

Understanding this simple linear time reversal helps build intuition for more complex string and array manipulations in interviews.

Self-Check

"What if we used recursion to reverse the string instead of a loop? How would the time complexity change?"

Practice

(1/5)
1. What does the std::reverse function do when applied to a string in C++?
easy
A. It reverses the order of characters in the string.
B. It sorts the characters in ascending order.
C. It removes all vowels from the string.
D. It converts all characters to uppercase.

Solution

  1. Step 1: Understand std::reverse behavior

    The std::reverse function reverses the order of elements in a range, here characters in a string.
  2. Step 2: Apply to string

    When applied to a string, it changes the string so the last character becomes first, and so on.
  3. Final Answer:

    It reverses the order of characters in the string. -> Option A
  4. Quick Check:

    std::reverse reverses string characters [OK]
Hint: std::reverse flips string characters in place [OK]
Common Mistakes:
  • Thinking std::reverse sorts characters
  • Confusing reversal with uppercase conversion
  • Assuming it removes characters
2. Which of the following is the correct syntax to reverse a string s using std::reverse in C++?
easy
A. std::reverse(s.begin(), s.end());
B. std::reverse(s, 0, s.length());
C. reverse(s.begin(), s.end());
D. std::reverse(s.start(), s.finish());

Solution

  1. Step 1: Identify correct std::reverse usage

    The std::reverse function requires two iterators: start and end of the range.
  2. Step 2: Match syntax with string iterators

    For string s, s.begin() and s.end() provide correct iterators.
  3. Final Answer:

    std::reverse(s.begin(), s.end()); -> Option A
  4. Quick Check:

    std::reverse needs begin and end iterators [OK]
Hint: Use s.begin() and s.end() with std::reverse [OK]
Common Mistakes:
  • Using incorrect iterator names like start() or finish()
  • Calling reverse without std:: prefix
  • Passing string and indices directly
3. What will be the output of the following C++ code?
std::string s = "hello";
for (int i = 0; i < s.length() / 2; ++i) {
    std::swap(s[i], s[s.length() - 1 - i]);
}
std::cout << s;
medium
A. hello
B. helol
C. olleh
D. error

Solution

  1. Step 1: Understand the swapping loop

    The loop swaps characters from start and end moving towards the center, effectively reversing the string.
  2. Step 2: Trace the swaps on "hello"

    Swap s[0] and s[4]: 'h' and 'o' -> "oellh"; Swap s[1] and s[3]: 'e' and 'l' -> "olleh".
  3. Final Answer:

    olleh -> Option C
  4. Quick Check:

    Swapping pairs reverses string [OK]
Hint: Swapping pairs from ends reverses string [OK]
Common Mistakes:
  • Not swapping correctly causing partial reversal
  • Loop running too many or too few times
  • Confusing indices causing wrong output
4. Identify the error in the following code that attempts to reverse a string s.
for (int i = 0; i <= s.length() / 2; ++i) {
    std::swap(s[i], s[s.length() - i]);
}
medium
A. No error; code correctly reverses the string.
B. The second index should be s.length() - 1 - i instead of s.length() - i to avoid out-of-range access.
C. The loop should start from i = 1 instead of 0.
D. std::swap cannot be used with string characters.

Solution

  1. Step 1: Check the swap indices

    The code uses s[s.length() - i]. For i=0, this accesses s[s.length()], out of bounds.
  2. Step 2: Correct reversal index

    To reverse, swap s[i] with s.length() - 1 - i.
  3. Final Answer:

    The second index should be s.length() - 1 - i instead of s.length() - i to avoid out-of-range access. -> Option B
  4. Quick Check:

    Missing -1 in second index causes out-of-range [OK]
Hint: Check indices carefully to avoid out-of-range errors [OK]
Common Mistakes:
  • Off-by-one error: s.length() - i instead of s.length() - 1 - i
  • Incorrect index calculation for swap
  • Assuming std::swap can't swap chars
5. Given a string s, which approach below correctly reverses the string without using extra space and handles empty strings safely?
hard
A. Use a while loop swapping characters until i > s.length().
B. Use std::reverse(s.begin(), s.end() - 1); to reverse all but last character.
C. Create a new string and append characters from end to start.
D. Use a for loop swapping characters from start to end with condition i < s.length() / 2.

Solution

  1. Step 1: Analyze each approach

    Use a for loop swapping characters from start to end with condition i < s.length() / 2. swaps characters in place up to half length, safe for empty strings. Use std::reverse(s.begin(), s.end() - 1); to reverse all but last character. misses last character. Create a new string and append characters from end to start. uses extra space. Use a while loop swapping characters until i > s.length(). has wrong loop condition.
  2. Step 2: Confirm correctness and safety

    Use a for loop swapping characters from start to end with condition i < s.length() / 2. reverses string in place without extra space and works for empty strings as loop won't run.
  3. Final Answer:

    Use a for loop swapping characters from start to end with condition i < s.length() / 2. -> Option D
  4. Quick Check:

    In-place swap up to half length reverses string safely [OK]
Hint: Swap pairs up to half length for safe in-place reversal [OK]
Common Mistakes:
  • Using incorrect end iterator causing partial reversal
  • Creating new string uses extra space
  • Wrong loop conditions causing infinite loops
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