用 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+ 瀏覽量

啟動您的 職業

完成課程可獲得認證

開始
廣告
© . All rights reserved.