문자열 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