String Traversal and Character Access in DSA C# - Time & Space Complexity
We want to understand how long it takes to look at each letter in a word or sentence.
How does the time needed change when the word gets longer?
Analyze the time complexity of the following code snippet.
string text = "hello world";
for (int i = 0; i < text.Length; i++)
{
char c = text[i];
// process character c
}
This code goes through each letter in the string one by one.
- Primary operation: Accessing each character in the string using a loop.
- How many times: Once for every character in the string.
As the string gets longer, the number of steps grows in the same way.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 character accesses |
| 100 | 100 character accesses |
| 1000 | 1000 character accesses |
Pattern observation: The work grows directly with the number of characters.
Time Complexity: O(n)
This means the time needed grows in a straight line as the string gets longer.
[X] Wrong: "Accessing characters inside a string is instant no matter the size."
[OK] Correct: Even though each access is quick, doing it for every character adds up as the string grows.
Knowing how string traversal time grows helps you explain your code's speed clearly and confidently.
"What if we only checked every other character instead of every character? How would the time complexity change?"
Practice
str[2] return when string str = "hello";?Solution
Step 1: Understand zero-based indexing in strings
In C#, string characters are accessed starting from index 0. So, str[0] = 'h', str[1] = 'e', str[2] = 'l'.Step 2: Identify the character at index 2
The character at index 2 in "hello" is 'l'.Final Answer:
The character 'l' -> Option BQuick Check:
str[2] = 'l' [OK]
- Thinking indexing starts at 1
- Confusing characters at index 1 and 2
- Assuming strings can't be indexed
str in C#?Solution
Step 1: Check loop indexing and range
In C#, string indexing starts at 0 and goes up to Length - 1. So the loop must run from 0 to str.Length - 1.Step 2: Validate each option
for (int i = 0; i < str.Length; i++) { Console.WriteLine(str[i]); } uses correct indexing (0 to Length-1). for (int i = 1; i <= str.Length; i++) { Console.WriteLine(str[i]); } starts at 1 and uses <= which causes out-of-range error. foreach (int c in str) { Console.WriteLine(c); } tries to foreach over int, but string yields chars, so type mismatch. for (char c = 0; c < str.Length; c++) { Console.WriteLine(str[c]); } uses char as loop variable which is incorrect.Final Answer:
for (int i = 0; i < str.Length; i++) { Console.WriteLine(str[i]); } -> Option DQuick Check:
Loop from 0 to Length-1 for string traversal [OK]
- Starting loop at 1 instead of 0
- Using <= instead of < in loop condition
- Using wrong variable type in foreach
string s = "code";
for (int i = 0; i < s.Length; i++)
{
if (i % 2 == 0)
Console.Write(s[i]);
}Solution
Step 1: Understand the loop and condition
The loop runs from i=0 to i=3 (length 4). It prints characters only when i is even (0, 2).Step 2: Identify characters at even indices
At i=0, s[0] = 'c'; at i=2, s[2] = 'd'. So output is "cd".Final Answer:
cd -> Option CQuick Check:
Print chars at even indices: 'c' and 'd' [OK]
- Confusing even and odd indices
- Printing all characters ignoring condition
- Misreading string length
string text = "example";
for (int i = 0; i <= text.Length; i++)
{
Console.Write(text[i]);
}Solution
Step 1: Analyze loop condition and indexing
The loop runs from i=0 to i <= text.Length. Since string indices go from 0 to Length-1, accessing text[Length] causes an error.Step 2: Correct the loop condition
Change condition to i < text.Length to avoid out-of-range exception.Final Answer:
The loop condition should be < instead of <= -> Option AQuick Check:
Loop must run from 0 to Length-1 [OK]
- Using <= instead of < in loop condition
- Assuming string indexing is 1-based
- Changing variable type unnecessarily
input, which code snippet correctly counts how many vowels (a, e, i, o, u) it contains?Solution
Step 1: Check correct iteration over string characters
int count = 0; foreach (char c in input.ToLower()) { if ("aeiou".Contains(c)) count++; } Console.WriteLine(count); uses foreach over chars in input.ToLower(), which is correct. int count = 0; for (int i = 1; i <= input.Length; i++) { if ("aeiou".Contains(input[i])) count++; } Console.WriteLine(count); uses 1-based indexing causing out-of-range error. int count = 0; foreach (int c in input) { if ("aeiou".Contains((char)c)) count++; } Console.WriteLine(count); uses foreach over int which is incorrect type. int count = 0; for (char c = 0; c < input.Length; c++) { if ("aeiou".Contains(input[c])) count++; } Console.WriteLine(count); uses char as loop variable which is invalid.Step 2: Verify vowel check and counting
int count = 0; foreach (char c in input.ToLower()) { if ("aeiou".Contains(c)) count++; } Console.WriteLine(count); checks if character is in "aeiou" string and increments count correctly.Final Answer:
Option A code snippet correctly counts vowels -> Option AQuick Check:
Use foreach char and check vowels with Contains [OK]
- Using wrong loop indices causing errors
- Incorrect variable types in loops
- Not converting string to lowercase before checking
Ready to prove it?
Pass the test and this pattern moves unknown
