-
Notifications
You must be signed in to change notification settings - Fork 2
/
Build the smallest
83 lines (49 loc) · 1.09 KB
/
Build the smallest
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
//{ Driver Code Starts
#include<bits/stdc++.h>
using namespace std;
string buildLowestNumber(string num, int k);
// Driver program to test above function
int main()
{
int t,n;
string str;
cin>>t;
while(t--)
{
cin>>n;
cin>>str;
cout << buildLowestNumber(str, n)<<endl;
}
return 0;
}
// } Driver Code Ends
string buildLowestNumber(string num, int k) {
stack<char> st;
st.push(num[0]);
int n = num.length();
for(int itr = 1; itr < n;++itr) {
while(!st.empty() && st.top() > num[itr] && k > 0) {
st.pop();
--k;
}
st.push(num[itr]);
}
while(k > 0) {
st.pop();
--k;
}
string ans = "";
while(!st.empty()) {
ans=st.top()+ans;
st.pop();
}
int leadingIndex = -1;
for(int itr = 0; itr < ans.length(); ++itr) {
if(ans[itr] != '0') break;
leadingIndex = itr;
}
if(leadingIndex == ans.length()-1) return "0";
if(leadingIndex >= 0) return ans.substr(leadingIndex+1);
return ans;
//code here.
}