Computer >> Máy Tính >  >> Lập trình >> C ++

Chuyển các chữ cái trong C ++

Giả sử chúng ta có một chuỗi S gồm các chữ cái thường và một mảng số nguyên thay đổi. Sự dịch chuyển của một chữ cái có nghĩa là chữ cái tiếp theo trong bảng chữ cái, đối với z, nó sẽ là a. Bây giờ với mỗi ca [i] =x, chúng ta muốn dịch chuyển i + 1 chữ cái đầu tiên của S, x lần. Chúng ta phải tìm chuỗi cuối cùng sau khi áp dụng tất cả các dịch chuyển như vậy sang S. Vì vậy, nếu chuỗi là “abc” và shift =[3,5,9], thì sau khi dịch 1 chữ cái đầu tiên của S thành 3, sẽ có “dbc”, chuyển hai chữ cái đầu tiên của S bằng 5, chúng ta có “igc ”, Và chuyển 3 chữ cái đầu tiên của S cho 9, chúng ta có“ rpl ”, và đây là câu trả lời.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • for i in range size of shift array - 2 down to 0
    • shift [i]:=shift [i] + shift [i + 1]
    • shift [i]:=shift [i] mod 26
  • cho tôi trong phạm vi từ 0 đến kích thước của S - 1
    • S [i]:=((S [i] - ASCII của a) + ca [i] mod 26) + ASCII của a
  • trả về S

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

Ví dụ

#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));
}

Đầu vào

"abc"
[3,5,9]

Đầu ra

rpl