Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 문자 이동

<시간/>

소문자로 된 문자열 S가 있고 정수 배열이 이동한다고 가정합니다. 문자의 이동은 알파벳의 다음 문자를 의미하며 z의 경우 다음 문자가 됩니다. 이제 각 shift[i] =x에 대해 S의 첫 번째 i+1 문자를 x번 이동하려고 합니다. S에 대한 이러한 모든 이동이 적용된 후 최종 문자열을 찾아야 합니다. 따라서 문자열이 "abc"이고 shifts =[3,5,9]이면 S의 처음 1자를 3만큼 이동한 후 "dbc"가 되고 S의 처음 두 글자를 5만큼 이동하면 "igc ", 그리고 S의 처음 세 글자를 9로 옮기면 "rpl"이 나오는데 이것이 답입니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • 시프트 배열의 범위 크기에 있는 i의 경우 – 2에서 0까지
    • shift[i] :=shift[i] + shift[i + 1]
    • shift[i] :=shift[i] 모드 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