由於只需要最終結果,而且左右又可以抵銷,因此不需要傻傻跟著每個指令轉,只需要統計最後要轉哪個方向幾次就好。
如果向同個方向轉 s長度 次,就等於轉一圈,因此統計次數可以取 len(s) 餘。
若向右轉 t 次,在位置[len(s)-t]之後的字母會跑到前方,在前方的字母會移到後方,可以寫成 s[len(s)-t:] + s[:len(s)-t]
也可以簡化成 s[-t:] + s[:-t] 。
class Solution: def stringShift(self, s: str, shift: List[List[int]]) -> str: right = 0 for each in shift: right += each[1] if each[0] else -each[1] right %= len(s) return s[-right:] + s[:-right]