|
1 | | -# Topics: Bit Manuputation, Bit-Mask, DP |
2 | | - |
3 | | - |
4 | 1 | class Solution: |
5 | 2 | def __init__(self): |
6 | 3 | self.dp = {} |
7 | | - |
8 | | - def countSetBits(self, n): |
| 4 | + def count_set_bits(self, n): |
9 | 5 | count = 0 |
10 | 6 | while n > 0: |
11 | 7 | count += n & 1 |
12 | 8 | n >>= 1 |
13 | 9 | return count |
14 | | - |
15 | | - def helper(self, s, k, i, mask, isChange): |
| 10 | + def helper(self, s, k, i, mask, is_change): |
16 | 11 | n = len(s) |
17 | 12 | if i == n: |
18 | 13 | return 1 |
19 | | - |
20 | | - currState = (i << 27) | (mask << 1) | isChange |
21 | | - |
22 | | - if currState in self.dp: |
23 | | - return self.dp[currState] |
24 | | - |
| 14 | + curr_state = (i << 27) | (mask << 1) | is_change |
| 15 | + if curr_state in self.dp: |
| 16 | + return self.dp[curr_state] |
25 | 17 | result = 0 |
26 | 18 | val = ord(s[i]) - ord('a') |
27 | | - |
28 | | - count = self.countSetBits(mask | (1 << val)) |
| 19 | + count = self.count_set_bits(mask | (1 << val)) |
29 | 20 | temp = 0 |
30 | 21 | if count > k: |
31 | | - temp = 1 + self.helper(s, k, i + 1, 1 << val, isChange) |
| 22 | + temp = 1 + self.helper(s, k, i + 1, 1 << val, is_change) |
32 | 23 | else: |
33 | | - temp = self.helper(s, k, i + 1, mask | (1 << val), isChange) |
| 24 | + temp = self.helper(s, k, i + 1, mask | (1 << val), is_change) |
34 | 25 | result = max(result, temp) |
35 | | - |
36 | | - if isChange == 0: |
| 26 | + if is_change == 0: |
37 | 27 | for j in range(26): |
38 | | - count = self.countSetBits(mask | (1 << j)) |
| 28 | + count = self.count_set_bits(mask | (1 << j)) |
39 | 29 | if count > k: |
40 | 30 | temp = 1 + self.helper(s, k, i + 1, 1 << j, 1) |
41 | 31 | else: |
42 | 32 | temp = self.helper(s, k, i + 1, mask | (1 << j), 1) |
43 | 33 | result = max(result, temp) |
44 | | - |
45 | | - self.dp[currState] = result |
46 | | - return result |
47 | | - |
48 | | - def maxPartitionsAfterOperations(self, s, k): |
49 | | - """ |
| 34 | + self.dp[curr_state] = result |
| 35 | + return result |
| 36 | + def max_partitions_after_operations(self, s, k): |
| 37 | + """ |
50 | 38 | :type s: str |
51 | 39 | :type k: int |
52 | 40 | :rtype: int |
53 | 41 | """ |
54 | 42 | return self.helper(s, k, 0, 0, 0) |
55 | 43 |
|
56 | | - # Time Complexity: O(n × 2²⁷) |
57 | | - # Auxiliary Space: O(n × 2²⁷) |
| 44 | + |
| 45 | +# Time Complexity: O(n × 2²⁷) |
| 46 | +# Auxiliary Space: O(n × 2²⁷) |
0 commit comments