Сложность: 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⃣Постройте и верните итоговую строку после всех сдвигов.
😎 Решение:
public class Solution {
public string ShiftingLetters(string s, int[] shifts) {
var result = new char[s.Length];
int totalShifts = 0;
foreach (int shift in shifts) {
totalShifts = (totalShifts + shift) % 26;
}
for (int i = 0; i < s.Length; ++i) {
int newCharValue = (s[i] - 'a' + totalShifts) % 26;
result[i] = (char)(newCharValue + 'a');
totalShifts = (totalShifts - shifts[i] + 26) % 26;
}
return new string(result);
}
}Ставь 👍 и забирай 📚 Базу знаний