File tree Expand file tree Collapse file tree
Sprint-2/improve_with_precomputing/count_letters Expand file tree Collapse file tree Original file line number Diff line number Diff 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
1325def 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).
You can’t perform that action at this time.
0 commit comments