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

C++의 순서 대기열

<시간/>

문자열 S가 있다고 가정합니다. S의 모든 문자는 소문자입니다. 그러면 우리는 얼마든지 움직일 수 있습니다.

여기에서 각 이동에서 첫 번째 K 문자 중 하나를 선택하여 제거하고 문자열 끝에 배치합니다. 우리는 여러 이동 후에 가질 수 있는 사전순으로 가장 작은 문자열을 찾아야 합니다.

따라서 입력이 "cabaa"이고 K =3이면 출력은 "aaabc"가 됩니다.

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

  • K> 1이면 -

    • 배열 S

      정렬
    • 반환 S

  • ret :=S

  • n :=S

    의 크기
  • initialize i :=1의 경우 i

    • S :=S의 첫 번째 문자를 잘라내고 끝에 S를 추가합니다.

    • S

      • ret =S

  • 리턴 렛

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

예시

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   string orderlyQueue(string S, int K) {
      if(K > 1){
         sort(S.begin(), S.end());
         return S;
      }
      string ret = S;
      int n = S.size();
      for(int i = 1; i < n; i++){
         S = S.substr(1) + S.substr(0, 1);
         if(S < ret) ret = S;
      }
      return ret;
   }
};
main(){
   Solution ob;
   cout << (ob.orderlyQueue("cabaa", 3));
}

입력

"cabaa", 3

출력

aaabc