Сложность: medium
Вам дана строка s из строчных букв английского алфавита и целочисленный массив shifts такой же длины.
Назовем shift() буквы следующей буквой в алфавите (с переходом так, что 'z' становится 'a').
Например, shift('a') = 'b', shift('t') = 'u', и shift('z') = 'a'.
Теперь для каждого shifts[i] = x мы хотим сдвинуть первые i + 1 букв строки s на x раз.
Верните итоговую строку после применения всех таких сдвигов к s.
Пример:
Input: s = "abc", shifts = [3,5,9]
Output: "rpl"
Explanation: We start with "abc".
After shifting the first 1 letters of s by 3, we have "dbc".
After shifting the first 2 letters of s by 5, we have "igc".
After shifting the first 3 letters of s by 9, we have "rpl", the answer.
👨💻 Алгоритм:
1⃣Вычислите общее количество сдвигов для всех символов строки, используя массив shifts.
2⃣Пройдите по строке s и примените вычисленные сдвиги к каждому символу, начиная с первого и уменьшая количество сдвигов на текущем шаге.
3⃣Постройте и верните итоговую строку после всех сдвигов.
😎 Решение:
class Solution:
def shiftingLetters(self, s: str, shifts: List[int]) -> str:
s = list(s)
totalShifts = sum(shifts) % 26
for i in range(len(s)):
newCharValue = (ord(s[i]) - ord('a') + totalShifts) % 26
s[i] = chr(newCharValue + ord('a'))
totalShifts = (totalShifts - shifts[i]) % 26
return ''.join(s)
Ставь 👍 и забирай 📚 Базу знаний