1class Solution {2public:3string smallestSubsequence(string s) {4string st = "";5unordered_map<char, int> m;6vector<bool> vis(26, false);7for (int i = 0; i < s.size(); i++) m[s[i]]++;89stack<char> t;1011t.push(s[0]), m[s[0]]--;12st += s[0];13vis[s[0] - 'a'] = true;1415for (int i = 1; i < s.size(); i++) {16m[s[i]]--;17if (!vis[s[i] - 'a']) {18while (!t.empty() && m[t.top()] > 0 && t.top() > s[i]) {19st.pop_back();20vis[t.top() - 'a'] = false;21t.pop();22}23t.push(s[i]);24vis[s[i] - 'a'] = true;25st = st + s[i];26}27}28return st;29}30};