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

**Note:**

`1 <= S.length = shifts.length <= 20000`

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