Fork me on GitHub

Remove Duplicate Letters

Description

https://leetcode.com/problems/remove-duplicate-letters/

Solution

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
class Solution {
public:
string removeDuplicateLetters(string s) {

vector<char> st;
vector<int> counter(26);
vector<bool> visited(26);
for (int i = 0; i < s.size(); ++i)
counter[s[i]-'a'] += 1;

for (int i = 0; i < s.size(); ++i) {
--counter[s[i]-'a'];
if (visited[s[i]-'a']) continue;
while (!st.empty() && st.back() > s[i]
&& counter[st.back()-'a'] > 0) {
visited[st.back()-'a'] = false;
st.pop_back();
}
st.push_back(s[i]);
visited[st.back()-'a'] = true;
}

return string(st.begin(), st.end());
}


};