用C ++转换字母

假设我们有一个小写字母的字符串S,并且一个整数数组移位了。字母的移位表示字母表中的下一个字母,对于z,它将为a。现在,对于每个shift [i] = x,我们想将S的前i + 1字母移位x次。在对S进行所有此类移位之后,我们必须找到最终的字符串。因此,如果字符串为“ abc”且shifts = [3,5,9],则在将S的前一个字母移位3之后,将具有“ dbc”,将S的前两个字母移位5,我们将获得“ igc” ”,然后将S的前三个字母移9,我们得到“ rpl”,这就是答案。

为了解决这个问题,我们将遵循以下步骤-

  • 对于我在移位数组范围内的大小– 2降至0

    • shift [i]:= shift [i] + shift [i +1]

    • shift [i]:= shift [i] mod 26

  • 对于范围从0到S – 1的i

    • S [i]:=(((S [i] – a的ASCII)+ shifts [i] mod 26)+ a的ASCII

  • 返回S

让我们看下面的实现以更好地理解-

示例

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   string shiftingLetters(string S, vector<int>& shifts) {
      for(int i = shifts.size() - 2 ;i >=0; i--){
         shifts[i] += shifts[i + 1];
         shifts[i] %= 26;
      }
      for(int i = 0; i < S.size(); i++) {
         S[i] = ( ((S[i] - 'a') + shifts[i]) % 26 + 'a');
      }
      return S;
   }
};
main(){
   vector<int> v = {3,5,9};
   Solution ob;
   cout << (ob.shiftingLetters("abc", v));
}

输入项

"abc"
[3,5,9]

输出结果

rpl