Skip to content

Commit 393cdea

Browse files
committed
Optimise count_letters by precomputing lowercase/uppercase sets
1 parent c151bf7 commit 393cdea

1 file changed

Lines changed: 20 additions & 5 deletions

File tree

Sprint-2/improve_with_precomputing/count_letters/count_letters.py

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,28 @@ def count_letters(s: str) -> int:
22
"""
33
count_letters returns the number of letters which only occur in upper case in the passed string.
44
"""
5-
only_upper = set()
5+
lower_case = set()
6+
upper_case= set()
7+
8+
9+
## Precompute lowercase and uppercase letters
610
for letter in s:
7-
if is_upper_case(letter):
8-
if letter.lower() not in s:
9-
only_upper.add(letter)
10-
return len(only_upper)
11+
if letter.islower():
12+
lower_case.add(letter)
13+
elif letter.isupper():
14+
upper_case.add(letter)
15+
16+
17+
# Count uppercase letters whose lowercase version never appears
18+
count = 0
19+
for letter in upper_case:
20+
if letter.lower() not in lower_case:
21+
count += 1
22+
return count
1123

1224

1325
def is_upper_case(letter: str) -> bool:
1426
return letter == letter.upper()
27+
28+
#The original solution was O(n²) because it repeatedly checked membership in the full string.
29+
#By precomputing lowercase and uppercase sets, membership checks become O(1), so the whole function becomes O(n).

0 commit comments

Comments
 (0)