Skip to content

Commit 3e693e1

Browse files
authored
Create 3337.py
1 parent 8a63606 commit 3e693e1

File tree

1 file changed

+35
-0
lines changed

1 file changed

+35
-0
lines changed

3001-3500/3337.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
class Solution(object):
2+
mod = 10**9 + 7
3+
4+
def multiplyMatrices(self, A, B):
5+
rowsA, colsA, colsB = len(A), len(A[0]), len(B[0])
6+
result = [[0]*colsB for _ in range(rowsA)]
7+
for i in range(rowsA):
8+
for j in range(colsB):
9+
tmp = 0
10+
for k in range(colsA):
11+
tmp += A[i][k] * B[k][j]
12+
result[i][j] = tmp % self.mod
13+
return result
14+
15+
def powerMatrix(self, matrix, exponent):
16+
n = len(matrix)
17+
result = [[1 if i==j else 0 for j in range(n)] for i in range(n)]
18+
while exponent > 0:
19+
if exponent & 1:
20+
result = self.multiplyMatrices(result, matrix)
21+
matrix = self.multiplyMatrices(matrix, matrix)
22+
exponent >>= 1
23+
return result
24+
25+
def lengthAfterTransformations(self, s, t, nums):
26+
transform = [[0]*26 for _ in range(26)]
27+
for i in range(26):
28+
for shift in range(nums[i]):
29+
transform[i][(i + 1 + shift) % 26] += 1
30+
transform = self.powerMatrix(transform, t)
31+
freq = [[0]*26]
32+
for ch in s:
33+
freq[0][ord(ch) - ord('a')] += 1
34+
freq = self.multiplyMatrices(freq, transform)
35+
return sum(freq[0]) % self.mod

0 commit comments

Comments
 (0)