1class Solution {2public:3string smallestSubsequence(string s, int k, char letter, int repetition) {4int count = 0, inStack = 0;5int n = s.size();6for (int i = 0; i < n; i++)7if (s[i] == letter) count++;8string res = "";9int i = 0;10while (i < n) {11if (res.empty())12res.push_back(s[i]);13else {14while (!res.empty() && res.back() > s[i] && n - i + res.size() > k) {15if (res.back() == letter && count + inStack - 1 >= repetition) {16res.pop_back();17inStack--;18} else if (res.back() == letter)19break;20else21res.pop_back();22}23if (s[i] == letter) {24inStack++;25count--;26}27res.push_back(s[i]);28}29i++;30}31string ret = "";32for (int i = 0; i < res.size(); i++) {33if (res[i] == letter && repetition > 0 && k > 0) {34repetition--;35ret += res[i];36k--;37} else if (k - repetition > 0) {38k--;39ret += res[i];40}41}42return ret;43}44};45/*46if(find helpful) {47do upvote(); // thanks48}49*/