- Data Structure
- Networking
- RDBMS
- Operating System
- Java
- MS Excel
- iOS
- HTML
- CSS
- Android
- Python
- C Programming
- C++
- C#
- MongoDB
- MySQL
- Javascript
- PHP
- Physics
- Chemistry
- Biology
- Mathematics
- English
- Economics
- Psychology
- Social Studies
- Fashion Studies
- Legal Studies
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Remove K Digits in C++
Suppose we have a non-negative integer num that is represented as a string, we have to remove k digits from the number so that the new number is the smallest possible. So if the input is like “1432219” and k = 3, then the result will be “1219”.
To solve this, we will follow these steps −
Define a stack st, create an empty string ret
n := size of num
for i in range 0 to n – 1
while k is non zero and stack is not empty and top of stack > num[i]
delete from the stack and decrease k by 1
insert num[i] into st
while k is not 0, delete element from the stack
while the stack is not empty
ret := ret + top of stack, delete element from stack
now reverse the ret string
ans := an empty string, and i := 0
while i < size of ret and ret[i] is not ‘0’
increase i by 1
for i < size of ret
ans := ans + ret[i]
ret := ans
return “0” if size of ret is 0, otherwise, ret
Example (C++)
Let us see the following implementation to get a better understanding −
class Solution { public: string removeKdigits(string num, int k) { stack st; string ret = ""; int n = num.size(); for(int i = 0; i < n; i++){ while(k && !st.empty() && st.top() > num[i]){ st.pop(); k--; } st.push(num[i]); } while(k--)st.pop(); while(!st.empty()){ ret += st.top(); st.pop(); } reverse(ret.begin(), ret.end()); string ans = ""; int i = 0; while(i <ret.size() && ret[i] == '0')i++; for(; i < ret.size(); i++)ans += ret[i]; ret = ans; return ret.size() == 0? "0" : ret; } };
Input
"1432219" 3
Output
"1219"