Giả sử có một chuỗi S. Tất cả các chữ cái trong S đều là chữ thường. Sau đó, chúng tôi có thể thực hiện bất kỳ động thái nào.
Ở đây, trong mỗi lần di chuyển, chúng ta chọn một trong K chữ cái đầu tiên, loại bỏ nó và đặt nó ở cuối chuỗi. Chúng ta phải tìm ra chuỗi nhỏ nhất về mặt từ vựng mà chúng ta có thể có sau bất kỳ số lần di chuyển nào.
Vì vậy, nếu đầu vào là "cabaa" và K =3, thì đầu ra sẽ là "aaabc"
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
-
nếu K> 1, thì -
-
sắp xếp mảng S
-
trả lại S
-
-
ret:=S
-
n:=kích thước của S
-
để khởi tạo i:=1, khi i
-
S:=cắt ký tự đầu tiên của S và thêm nó vào cuối thành S
-
nếu S
-
ret =S
-
-
-
trả lại ret
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 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)); }
Đầu vào
"cabaa", 3
Đầu ra
aaabc