मान लीजिए कि एक स्ट्रिंग S है। S के सभी अक्षर लोअरकेस में हैं। फिर, हम कितनी भी चालें चल सकते हैं।
यहां, प्रत्येक चाल में, हम पहले K अक्षरों में से एक को चुनते हैं, और इसे हटाते हैं, और इसे स्ट्रिंग के अंत में रखते हैं। हमें किसी भी संख्या में चालों के बाद लेक्सिकोग्राफ़िक रूप से सबसे छोटी स्ट्रिंग ढूंढनी होगी।
इसलिए, यदि इनपुट "cabaa" और K =3 जैसा है, तो आउटपुट "aaabc" होगा
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
अगर के> 1, तो -
-
सरणी S को सॉर्ट करें
-
वापसी एस
-
-
रिट:=एस
-
n :=S का आकार
-
इनिशियलाइज़ करने के लिए मैं :=1, जब i
-
S :=S के पहले अक्षर को काटें और अंत में 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