# 26. Shifting Letters

We have a string `S` of lowercase letters, and an integer array `shifts`.

Call the *shift* of a letter, the next letter in the alphabet, (wrapping around so that `'z'` becomes `'a'`).&#x20;

For example, `shift('a') = 'b'`, `shift('t') = 'u'`, and `shift('z') = 'a'`.

Now for each `shifts[i] = x`, we want to shift the first `i+1` letters of `S`, `x` times.

Return the final string after all such shifts to `S` are applied.

**Example 1:**

```
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.
```

## Approach

**Brute Force:**\
**Iterate through shift and shift the characters.**\
**It gives TLE**\
\
**Optimized:**\
**Suffix Sum**\
**Pre compute the total number of shifts required**

## Solution: (Suffix Sum)

```cpp
class Solution
{
public:
    string shiftingLetters(string s, vector<int> &shifts)
    {

        int n = shifts.size() - 1;

        shifts[n] = shifts[n] % 26;

        for (int i = n - 1; i >= 0; i--)
        {
            shifts[i] = (shifts[i] + shifts[i + 1]) % 26;
        }

        for (int i = 0; i < s.length(); i++)
        {
            int ch = s[i];
            int newChar = ch + shifts[i];
            if (newChar > 122)
            {
                newChar = (newChar % 122) + 96;
            }
            s[i] = newChar;
        }
        return s;
    }
};
```

**Time Complexity: O(n)**
