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