In this HackerEarth Alex and his String problem solution Alex has a string S of length N consisting of lowercase alphabets. He wants to find lexicographically smallest string X of length N that can be formed using the following operation.

In one operation, he can select any one character among the at most first K characters of string S, remove it from string S and append it to string X. He can apply this operation as many times as he wants.

Help Alex find the string X.


HackerEarth Alex and his String problem solution


HackerEarth Alex and his String problem solution.

#include <bits/stdc++.h>
using namespace std;

int main() {
priority_queue<char,vector<char>,greater<char>> pq;
string s;
cin>>s;
int k; cin>>k;
for(int i=0;i<k;i++) pq.push(s[i]);
string ans;
for(int i=k;i<s.length();i++){
ans+=pq.top();
pq.pop();
pq.push(s[i]);
}
while(!pq.empty()) {
ans+=pq.top();
pq.pop();
}
cout<<ans<<"\n";
return 0;
}