Introduction
LeetCode 3120 – Count the Number of Special Characters I is a beginner-friendly string and hashing problem.
This problem focuses on:
- Character manipulation
- Uppercase and lowercase conversion
- HashSet usage
- String traversal
- Basic optimization techniques
It is a good interview problem for testing:
- Understanding of ASCII characters
- Java Character methods
- Set operations
- Problem-solving logic
Problem Link
🔗 https://leetcode.com/problems/count-the-number-of-special-characters-i/
Problem Statement
You are given a string:
A character is called:
if it appears in both:
- Lowercase
- Uppercase
Return:
Example 1
Input
Output
Explanation
Characters:
All appear in both cases.
So answer is:
Example 2
Input
Output:
No uppercase letters exist.
Example 3
Input
Output:
Only:
appear in both forms.
Intuition
We need to check:
For every lowercase character:
Using HashSet makes lookup very fast.
Brute Force Approach
Idea
For every character:
- Traverse entire string
- Search for uppercase/lowercase pair
- Count valid matches
Brute Force Complexity
Time Complexity
because nested traversal is required.
Space Complexity
Optimized HashSet Approach
Idea
Use two sets:
- One for lowercase letters
- One for uppercase letters
Then check matching pairs.
Java Solution
Cleaner Optimized Version
Why This Works
We separate:
- Lowercase characters
- Uppercase characters
Then for every lowercase letter:
We check whether uppercase version exists.
HashSet lookup works in:
average time.
Dry Run
Input
Step 1
Lowercase set:
Uppercase set:
Step 2
Check:
Count becomes:
Final Answer
Time Complexity Analysis
Optimized HashSet Solution
Time Complexity
because string traversal happens only once.
Space Complexity
Maximum alphabet size is fixed:
Brute Force vs Optimized
| Approach | Time Complexity | Space Complexity |
| Brute Force | O(N²) | O(1) |
| HashSet Approach | O(N) | O(1) |
Interview Explanation
In interviews, explain:
We use two HashSets to separately store lowercase and uppercase letters. Then we check whether a lowercase character has its uppercase counterpart.
This demonstrates:
- Efficient lookup usage
- Hashing knowledge
- Character manipulation skills
Common Mistakes
1. Double Counting Characters
Without removing counted characters:
2. Forgetting Case Conversion
Always convert:
before comparison.
3. Using Nested Loops Unnecessarily
HashSet reduces lookup complexity significantly.
FAQs
Q1. Why use HashSet?
Because lookup operations are very fast.
Q2. Can this be solved without extra space?
Yes.
Using arrays of size 26 is also possible.
Q3. Why remove characters after counting?
To avoid duplicate counting.
Q4. Is this problem important for interviews?
Yes.
It tests:
- String handling
- Character conversion
- HashSet usage
- Optimization thinking
Related Problems
Practice these next:
Conclusion
LeetCode 3120 is a simple but effective problem for learning:
- HashSet operations
- String traversal
- Case conversion
- Efficient lookup techniques
The key idea is:
Store lowercase and uppercase letters separately, then check matching pairs efficiently.
Once this pattern becomes clear, many string hashing problems become much easier.





