Skip to content

Commit 39ffbe8

Browse files
committed
May 14
1 parent b1575d8 commit 39ffbe8

File tree

2 files changed

+56
-2
lines changed

2 files changed

+56
-2
lines changed

2025-05-May-LeetCoding-Challenge/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
| May 11 | [1550. Three Consecutive Odds](https://leetcode.com/problems/three-consecutive-odds/) | Easy | Solved |
1818
| May 12 | [2094. Finding 3-Digit Even Numbers](https://leetcode.com/problems/finding-3-digit-even-numbers/) | Easy | Solved |
1919
| May 13 | [3335. Total Characters in String After Transformations I](https://leetcode.com/problems/total-characters-in-string-after-transformations-i/) | Medium | Solved |
20-
| May 14 | []() | | |
20+
| May 14 | [3337. Total Characters in String After Transformations II](https://leetcode.com/problems/total-characters-in-string-after-transformations-ii/) | Hard | Unsolved |
2121
| May 15 | []() | | |
2222
| May 16 | []() | | |
2323
| May 17 | []() | | |
@@ -42,4 +42,4 @@
4242
| --- | --- | --- | --- |
4343
| Easy | 4 | 4 | 0 |
4444
| Medium | 7 | 7 | 0 |
45-
| Hard | 2 | 1 | 1 |
45+
| Hard | 3 | 1 | 2 |
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
from itertools import product
2+
3+
4+
class Solution:
5+
MOD = 10**9 + 7
6+
7+
def __multiply_matrices(self, mat1: list[list[int]], mat2: list[list[int]]) -> list[list[int]]:
8+
p, q, r = len(mat1), len(mat1[0]), len(mat2[0])
9+
result = [[0] * r for _ in range(p)]
10+
for i, j in product(range(p), range(r)):
11+
temp = 0
12+
for k in range(q):
13+
temp += mat1[i][k] * mat2[k][j]
14+
result[i][j] = temp % self.MOD
15+
return result
16+
17+
def __power_matrix(self, matrix: list[list[int]], exp: int) -> list[list[int]]:
18+
n = len(matrix)
19+
result = [[int(i == j) for j in range(n)] for i in range(n)]
20+
while exp > 0:
21+
if exp & 1:
22+
result = self.__multiply_matrices(result, matrix)
23+
matrix = self.__multiply_matrices(matrix, matrix)
24+
exp >>= 1
25+
return result
26+
27+
def lengthAfterTransformations(self, s: str, t: int, nums: list[int]) -> int:
28+
transform = [[0] * 26 for _ in range(26)]
29+
for i in range(26):
30+
for shift in range(nums[i]):
31+
transform[i][(i + 1 + shift) % 26] += 1
32+
transform = self.__power_matrix(transform, t)
33+
34+
freqs = [[0] * 26]
35+
for ch in s:
36+
freqs[0][ord(ch) - ord('a')] += 1
37+
freqs = self.__multiply_matrices(freqs, transform)
38+
return sum(freqs[0]) % self.MOD
39+
40+
41+
def main():
42+
s = 'abcyy'
43+
t = 2
44+
nums = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2]
45+
assert Solution().lengthAfterTransformations(s, t, nums) == 7
46+
47+
s = 'azbk'
48+
t = 1
49+
nums = [2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
50+
assert Solution().lengthAfterTransformations(s, t, nums) == 8
51+
52+
53+
if __name__ == '__main__':
54+
main()

0 commit comments

Comments
 (0)