Advertisement
Marvin48

remove k digits

Dec 11th, 2017
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.58 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. class Solution {
  6. private:
  7.     void add_digit(string &res, char &ch){
  8.         if (!(ch == '0' && res.size() == 0))
  9.             res += ch;
  10.     }
  11.    
  12. public:
  13.     string removeKdigits(string num, int k) {
  14.         string result = "";
  15.         char last_char = '?';
  16.         if (num.size() == k) return "0";
  17.        
  18.         for (char current_char : num) {
  19.             if (k == 0){
  20.                 if (last_char != '?') {
  21.                     add_digit(result, last_char);
  22.                     last_char = '?';
  23.                 }
  24.                 add_digit(result, current_char);
  25.             }
  26.             else {
  27.                 if (last_char == '?') {
  28.                     last_char = current_char;
  29.                     continue;
  30.                 }
  31.                
  32.                 if (current_char >= last_char) {
  33.                     add_digit(result, last_char);
  34.                 } else {
  35.                     k--;
  36.                 }
  37.                 last_char = current_char;
  38.             }
  39.         }
  40.        
  41.         if (last_char != '?')
  42.             result += last_char;
  43.        
  44.         for (long pos = result.size() - 1; pos >= 0; pos--){
  45.             if (k == 0) break;
  46.             if (result[pos] == '0')
  47.                 continue;
  48.             result.erase(pos, 1);
  49.             k--;
  50.         }
  51.        
  52.         if (result == "")
  53.             result = "0";
  54.         return result;
  55.     }
  56. };
  57.  
  58. int main(int argc, const char * argv[]) {
  59.     Solution sol;
  60.     cout << sol.removeKdigits("1234506789", 9) << endl;
  61.    
  62.     return 0;
  63. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement