-
-
Notifications
You must be signed in to change notification settings - Fork 40
/
Copy path0514-freedom-trail.py
33 lines (25 loc) · 982 Bytes
/
0514-freedom-trail.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# time complexity: O(K*R^2)
# space complexity: O(K*R)
from cmath import inf
class Solution:
def findRotateSteps(self, ring: str, key: str) -> int:
ringLen = len(ring)
keyLen = len(key)
bestSteps = [[inf] * (keyLen + 1) for _ in range(ringLen)]
def count_steps(curr, next):
stepsBetween = abs(curr - next)
stepsAround = ringLen - stepsBetween
return min(stepsBetween, stepsAround)
for row in bestSteps:
row[keyLen] = 0
for keyI in range(keyLen - 1, -1, -1):
for ringI in range(ringLen):
for charI in range(ringLen):
if ring[charI] == key[keyI]:
bestSteps[ringI][keyI] = min(
bestSteps[ringI][keyI],
1 + count_steps(ringI, charI)
+ bestSteps[charI][keyI + 1])
return bestSteps[0][0]
ring = "godding"
key = "gd"