Character Frequency Counting in DSA C# - Time & Space Complexity
We want to understand how long it takes to count how often each character appears in a string.
The question is: how does the time needed grow as the string gets longer?
Analyze the time complexity of the following code snippet.
var input = "example";
var frequency = new Dictionary<char, int>();
foreach (var ch in input)
{
if (frequency.ContainsKey(ch))
frequency[ch]++;
else
frequency[ch] = 1;
}
This code counts how many times each character appears in the input string.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Looping through each character in the string once.
- How many times: Exactly once for each character, so as many times as the string length.
As the string gets longer, the number of steps grows directly with its length.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 10 checks and updates |
| 100 | About 100 checks and updates |
| 1000 | About 1000 checks and updates |
Pattern observation: The work grows evenly as the input grows; doubling input doubles work.
Time Complexity: O(n)
This means the time to count characters grows in a straight line with the string length.
[X] Wrong: "Since we check if a character exists in the dictionary, it might take longer for bigger strings."
[OK] Correct: Dictionary lookups are very fast and do not slow down as the string grows, so each check is almost constant time.
Knowing how to analyze counting tasks like this helps you explain your code clearly and shows you understand how your program scales.
"What if we used a nested loop to compare each character with every other character? How would the time complexity change?"
Practice
Solution
Step 1: Understand character frequency counting
It means counting how many times each character shows up in a string.Step 2: Identify what is counted
We count the occurrences of each character, not length or position.Final Answer:
How many times each character appears in the string -> Option CQuick Check:
Frequency counting = count characters [OK]
- Confusing frequency with string length
- Thinking frequency means character position
- Mixing frequency with first character only
Solution
Step 1: Identify data structure needs
We need to map each character to its count, so key-value pairs are needed.Step 2: Choose correct C# structure
Dictionary stores characters as keys and counts as values.Final Answer:
Dictionary -> Option DQuick Check:
Use Dictionary for key-value pairs [OK]
- Using List which stores only values, no keys
- Choosing Queue or Stack which are for order, not mapping
- Trying to use arrays without mapping keys
string s = "hello";
var freq = new Dictionary();
foreach (char c in s) {
if (freq.ContainsKey(c)) freq[c]++;
else freq[c] = 1;
}
foreach (var pair in freq) {
Console.Write(pair.Key + ":" + pair.Value + " ");
}Solution
Step 1: Count characters in "hello"
h=1, e=1, l=2, o=1Step 2: Check code logic
Code counts each character correctly and prints key:value pairs with spaces.Final Answer:
h:1 e:1 l:2 o:1 -> Option AQuick Check:
Count 'l' twice, others once [OK]
- Counting 'l' only once
- Adding extra counts for characters
- Misreading output format
string s = "test";
var freq = new Dictionary();
foreach (char c in s) {
freq[c]++;
}Solution
Step 1: Analyze dictionary usage
freq[c]++ tries to increment value without checking if key exists first.Step 2: Identify runtime error
This causes a KeyNotFoundException because key may not exist initially.Final Answer:
Incrementing freq[c] without checking if key exists -> Option BQuick Check:
Check key before incrementing [OK]
- Assuming dictionary keys exist by default
- Ignoring KeyNotFoundException
- Not initializing dictionary
Choose the best approach.
Solution
Step 1: Count frequencies with Dictionary
Use Dictionary to store counts of each character.Step 2: Find character with max frequency
Iterate dictionary to find key with highest value.Final Answer:
Use a Dictionary to count frequencies, then find max value key -> Option AQuick Check:
Dictionary + max search = highest frequency [OK]
- Sorting string does not give frequency info
- Using List without mapping counts
- Stack is not suitable for frequency counting
Ready to prove it?
Pass the test and this pattern moves unknown
