用 C++ 中移动字母


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

为解决此问题,我们将遵循以下步骤 −

  • 对于 i 在 shifts 数组大小-2 到 0 范围内
    • shift[i] := shift[i] + shift[i + 1]
    • shift[i] := shift[i] mod 26
  • 对于 i 在 0 到 S 的大小-1 范围内
    • S[i] := ((S[i] – ASCII 的 a) + shifts[i] mod 26) + ASCII 的 a
  • 返回 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

更新日期:05-05-2020

3K+ 浏览量

启动您的 职业

完成课程可获得认证

开始
广告