leetcode 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

思路

shift一个字符:
s[i]=(s[i]-‘a’+shift)%26+’a’

代码

1
2
3
4
5
6
7
8
9
10
11
class Solution {
public:
string shiftingLetters(string S, vector<int>& shifts) {
long long c=0;
for(int i=shifts.size()-1;i>=0;i--){
c+=shifts[i];
S[i]=(S[i]-'a'+c)%26+'a';
}
return S;
}
};
1
2
3
4
5
6
7
8
9
10
11
12
13
 class Solution {
public:
string shiftingLetters(string S, vector<int>& shifts) {
int c=0;
for(int i=shifts.size()-1;i>=0;i--){
//把移动次数转到0-25 防止shift的int数组溢出
c+=(shifts[i])%26;
//如果是s[i]='z' c=1 所以还得取一次余
S[i]=(S[i]-'a'+c)%26+'a';
}
return S;
}
};