Bird
Raised Fist0
DSA C#programming

String Reversal Approaches in DSA C#

Choose your learning style10 modes available
Mental Model
Reversing a string means flipping its characters so the last becomes first and the first becomes last.
Analogy: Imagine reading a sentence backwards, starting from the end and moving to the beginning, like rewinding a tape.
Original: H -> e -> l -> l -> o -> null
Reversed: o -> l -> l -> e -> H -> null
Dry Run Walkthrough
Input: string: "hello"
Goal: Reverse the string so it reads "olleh"
Step 1: Start with two pointers: left at index 0 ('h'), right at index 4 ('o')
h [left->0] -> e -> l -> l -> o [right->4]
Why: We need to swap characters from the ends moving inward
Step 2: Swap characters at left and right: 'h' and 'o'
o -> e -> l -> l -> h
Why: Swapping first and last characters begins reversal
Step 3: Move left pointer to 1 ('e'), right pointer to 3 ('l')
o -> e [left->1] -> l -> l [right->3] -> h
Why: Continue swapping inward pairs
Step 4: Swap characters at left and right: 'e' and 'l'
o -> l -> l -> e -> h
Why: Swapping second and second-last characters continues reversal
Step 5: Move left pointer to 2 ('l'), right pointer to 2 ('l')
o -> l -> l [left->2,right->2] -> e -> h
Why: Pointers meet in the middle, reversal is complete
Result:
o -> l -> l -> e -> h
Reversed string: "olleh"
Annotated Code
DSA C#
using System;

class StringReversal {
    public static string ReverseString(string input) {
        char[] chars = input.ToCharArray();
        int left = 0;
        int right = chars.Length - 1;
        while (left < right) {
            // swap chars[left] and chars[right]
            char temp = chars[left];
            chars[left] = chars[right];
            chars[right] = temp;
            left++; // move left pointer inward
            right--; // move right pointer inward
        }
        return new string(chars);
    }

    static void Main() {
        string original = "hello";
        string reversed = ReverseString(original);
        Console.WriteLine(reversed);
    }
}
while (left < right) {
loop until pointers meet or cross to reverse characters
char temp = chars[left]; chars[left] = chars[right]; chars[right] = temp;
swap characters at left and right positions
left++; right--;
move pointers inward to continue swapping next pair
OutputSuccess
olleh
Complexity Analysis
Time: O(n) because we swap characters from both ends moving inward, touching each character once
Space: O(n) because we create a character array copy of the string for in-place swaps
vs Alternative: Compared to creating a new reversed string by concatenation (which is O(n²)), this approach is more efficient
Edge Cases
empty string
returns empty string immediately without swaps
DSA C#
while (left < right) {
single character string
returns the same single character string as reversal is itself
DSA C#
while (left < right) {
string with all identical characters
swapping identical characters does not change string, returns same string
DSA C#
char temp = chars[left];
When to Use This Pattern
When asked to reverse a string or array in place, use two pointers from ends moving inward to swap elements efficiently.
Common Mistakes
Mistake: Swapping characters without moving pointers inward causes infinite loop
Fix: Increment left and decrement right pointers inside the loop after swapping
Mistake: Using string concatenation inside loop causing slow performance
Fix: Convert string to char array and swap in place for O(n) time
Summary
Reverses a string by swapping characters from both ends moving inward.
Use when you need to reverse strings efficiently without extra costly operations.
The key insight is using two pointers to swap characters in place until they meet.

Practice

(1/5)
1. What does the string.Reverse() method in C# do when applied to a string?
easy
A. Returns a sequence of characters in reverse order
B. Modifies the original string to be reversed
C. Throws an error because strings are immutable
D. Converts the string to uppercase

Solution

  1. Step 1: Understand string.Reverse() behavior

    The Reverse() method returns an IEnumerable<char> with characters in reverse order but does not change the original string.
  2. Step 2: Check string immutability

    Strings in C# are immutable, so Reverse() cannot modify the original string directly.
  3. Final Answer:

    Returns a sequence of characters in reverse order -> Option A
  4. Quick Check:

    string.Reverse() returns reversed sequence [OK]
Hint: Reverse() returns reversed chars sequence, original string unchanged [OK]
Common Mistakes:
  • Thinking Reverse() changes the original string
  • Expecting Reverse() to return a string directly
  • Confusing Reverse() with ToUpper()
2. Which of the following is the correct syntax to reverse a string str and convert it back to a string in C#?
easy
A. string reversed = new string(str.Reverse().ToArray());
B. string reversed = str.Reverse().ToString();
C. string reversed = string.Reverse(str);
D. string reversed = str.Reverse().Join("");

Solution

  1. Step 1: Use Reverse() and convert to string

    str.Reverse() returns IEnumerable<char>, so to get a string, wrap it with new string(...) after converting to array.
  2. Step 2: Check each option

    string reversed = new string(str.Reverse().ToArray()); correctly uses new 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).
  3. Final Answer:

    string reversed = new string(str.Reverse().ToArray()); -> Option A
  4. Quick Check:

    Use new string(str.Reverse().ToArray()) to reverse string [OK]
Hint: Wrap Reverse() with new string() and ToArray() to get reversed string [OK]
Common Mistakes:
  • Calling ToString() on Reverse() result
  • Using string.Reverse() as static method
  • Incorrect use of Join method
3. What will be the output of the following C# code?
string input = "hello";
char[] arr = input.ToCharArray();
Array.Reverse(arr);
string reversed = new string(arr);
Console.WriteLine(reversed);
medium
A. olleh\n
B. hello
C. olleh
D. Error at Array.Reverse

Solution

  1. Step 1: Convert string to char array

    input.ToCharArray() creates ['h','e','l','l','o'].
  2. Step 2: Reverse the char array

    Array.Reverse(arr) reverses array to ['o','l','l','e','h'].
  3. Step 3: Create new string from reversed array

    new string(arr) creates "olleh" string.
  4. Step 4: Print reversed string

    Console.WriteLine prints "olleh" without extra characters.
  5. Final Answer:

    olleh -> Option C
  6. Quick Check:

    Char array reversed then joined = olleh [OK]
Hint: Reverse char array then new string gives reversed string [OK]
Common Mistakes:
  • Expecting Array.Reverse to return a value
  • Printing char array directly instead of string
  • Confusing reversed string with original
4. Identify the error in the following code that attempts to reverse a string:
string s = "world";
string reversed = s.Reverse().ToString();
Console.WriteLine(reversed);
medium
A. s is immutable, so Reverse() cannot be called
B. Console.WriteLine cannot print reversed string
C. Missing semicolon after Reverse()
D. Reverse() returns IEnumerable<char>, ToString() does not convert to string

Solution

  1. Step 1: Understand Reverse() return type

    s.Reverse() returns IEnumerable<char>, not a string.
  2. Step 2: ToString() on IEnumerable<char>

    Calling ToString() on IEnumerable<char> returns type name, not reversed string.
  3. Step 3: Correct way to convert reversed chars to string

    Use new string(s.Reverse().ToArray()) to get reversed string.
  4. Final Answer:

    Reverse() returns IEnumerable<char>, ToString() does not convert to string -> Option D
  5. Quick Check:

    ToString() on IEnumerable<char> ≠ reversed string [OK]
Hint: ToString() on Reverse() result returns type name, not string [OK]
Common Mistakes:
  • Assuming ToString() converts reversed chars to string
  • Ignoring need to convert IEnumerable<char> to array
  • Thinking Reverse() modifies original string
5. You want to reverse only the vowels in a string "education" while keeping other characters in place. Which approach is best in C#?
hard
A. Use Regex to remove vowels, reverse string, then append vowels at end
B. Convert string to char array, swap vowels using two pointers, then create new string
C. Use string.Reverse() to reverse entire string and then replace consonants
D. Call ToCharArray(), reverse array, then convert back to string

Solution

  1. Step 1: Understand problem requirement

    Only vowels should be reversed, consonants stay in place.
  2. 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.
  3. 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.
  4. Final Answer:

    Convert string to char array, swap vowels using two pointers, then create new string -> Option B
  5. Quick Check:

    Two-pointer vowel swap preserves consonants [OK]
Hint: Use two pointers on char array to reverse vowels only [OK]
Common Mistakes:
  • Reversing entire string instead of vowels only
  • Removing vowels and losing original order
  • Not converting string to char array before swapping
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