## 848. 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'`).

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

Note:

1. `1 <= S.length = shifts.length <= 20000`
2. `0 <= shifts[i] <= 10 ^ 9`

## Rust Solution

``````struct Solution;

impl Solution {
fn shifting_letters(s: String, shifts: Vec<i32>) -> String {
let n = s.len();
let mut s: Vec<char> = s.chars().collect();
let mut prev: u8 = 0;
for i in (0..n).rev() {
prev += (shifts[i] % 26) as u8;
prev %= 26;
s[i] = (b'a' + (s[i] as u8 - b'a' + prev) % 26) as char;
}
s.into_iter().collect()
}
}

#[test]
fn test() {
let s = "abc".to_string();
let shifts = vec![3, 5, 9];
let res = "rpl".to_string();
assert_eq!(Solution::shifting_letters(s, shifts), res);
}
``````

Having problems with this solution? Click here to submit an issue on github.