String Reversal Approaches in DSA C# - Time & Space 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 string size increases?
Analyze the time complexity of the following code snippet.
string ReverseString(string input) {
char[] chars = input.ToCharArray();
Array.Reverse(chars);
return new string(chars);
}
This code converts the string to a character array, reverses it, and then creates a new reversed string.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Reversing the character array involves swapping elements.
- How many times: About half the length of the string (n/2) swaps happen.
As the string gets longer, the number of swaps grows roughly in direct proportion to its length.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 5 swaps |
| 100 | 50 swaps |
| 1000 | 500 swaps |
Pattern observation: Doubling the string length roughly doubles the work needed.
Time Complexity: O(n)
This means the time to reverse the string grows linearly with the string length.
[X] Wrong: "Reversing a string takes constant time because it's just one operation."
[OK] Correct: Each character must be moved or swapped, so the time grows with the string size, not fixed.
Understanding how string reversal scales helps you reason about similar problems involving arrays or sequences.
"What if we used recursion to reverse the string? How would the time complexity change?"
Practice
string.Reverse() method in C# do when applied to a string?Solution
Step 1: Understand string.Reverse() behavior
TheReverse()method returns an IEnumerable<char> with characters in reverse order but does not change the original string.Step 2: Check string immutability
Strings in C# are immutable, soReverse()cannot modify the original string directly.Final Answer:
Returns a sequence of characters in reverse order -> Option AQuick Check:
string.Reverse() returns reversed sequence [OK]
- Thinking Reverse() changes the original string
- Expecting Reverse() to return a string directly
- Confusing Reverse() with ToUpper()
str and convert it back to a string in C#?Solution
Step 1: Use Reverse() and convert to string
str.Reverse()returns IEnumerable<char>, so to get a string, wrap it withnew string(...)after converting to array.Step 2: Check each option
string reversed = new string(str.Reverse().ToArray()); correctly usesnew string(str.Reverse().ToArray()). string reversed = str.Reverse().ToString(); calls ToString() on IEnumerable<char>, which returns type name, not reversed string. string reversed = string.Reverse(str); is invalid syntax. string reversed = str.Reverse().Join(""); uses Join incorrectly (should be string.Join).Final Answer:
string reversed = new string(str.Reverse().ToArray()); -> Option AQuick Check:
Use new string(str.Reverse().ToArray()) to reverse string [OK]
- Calling ToString() on Reverse() result
- Using string.Reverse() as static method
- Incorrect use of Join method
string input = "hello"; char[] arr = input.ToCharArray(); Array.Reverse(arr); string reversed = new string(arr); Console.WriteLine(reversed);
Solution
Step 1: Convert string to char array
input.ToCharArray()creates ['h','e','l','l','o'].Step 2: Reverse the char array
Array.Reverse(arr)reverses array to ['o','l','l','e','h'].Step 3: Create new string from reversed array
new string(arr)creates "olleh" string.Step 4: Print reversed string
Console.WriteLine prints "olleh" without extra characters.Final Answer:
olleh -> Option CQuick Check:
Char array reversed then joined = olleh [OK]
- Expecting Array.Reverse to return a value
- Printing char array directly instead of string
- Confusing reversed string with original
string s = "world"; string reversed = s.Reverse().ToString(); Console.WriteLine(reversed);
Solution
Step 1: Understand Reverse() return type
s.Reverse()returns IEnumerable<char>, not a string.Step 2: ToString() on IEnumerable<char>
CallingToString()on IEnumerable<char> returns type name, not reversed string.Step 3: Correct way to convert reversed chars to string
Usenew string(s.Reverse().ToArray())to get reversed string.Final Answer:
Reverse() returns IEnumerable<char>, ToString() does not convert to string -> Option DQuick Check:
ToString() on IEnumerable<char> ≠ reversed string [OK]
- Assuming ToString() converts reversed chars to string
- Ignoring need to convert IEnumerable<char> to array
- Thinking Reverse() modifies original string
"education" while keeping other characters in place. Which approach is best in C#?Solution
Step 1: Understand problem requirement
Only vowels should be reversed, consonants stay in place.Step 2: Evaluate approaches
Convert string to char array, swap vowels using two pointers, then create new string uses two pointers on char array to swap vowels in place, preserving consonants. Use string.Reverse() to reverse entire string and then replace consonants reverses entire string, losing consonant positions. Use Regex to remove vowels, reverse string, then append vowels at end removes vowels, losing original order. Call ToCharArray(), reverse array, then convert back to string reverses entire string, not selective vowels.Step 3: Choose best approach
Convert string to char array, swap vowels using two pointers, then create new string is efficient and correct for selective vowel reversal.Final Answer:
Convert string to char array, swap vowels using two pointers, then create new string -> Option BQuick Check:
Two-pointer vowel swap preserves consonants [OK]
- Reversing entire string instead of vowels only
- Removing vowels and losing original order
- Not converting string to char array before swapping
Ready to prove it?
Pass the test and this pattern moves unknown
