Skip to content

Commit 8ad8ab5

Browse files
committed
remove_duplicate_letters
1 parent b38dabe commit 8ad8ab5

File tree

2 files changed

+32
-0
lines changed

2 files changed

+32
-0
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,7 @@ Golang solution for leetcode. For each problem, there is a simple *_test.go to t
229229
#### [312. Burst Balloons](https://github.com/hitzzc/go-leetcode/tree/master/burst_balloons)
230230
#### [313. Super Ugly Number](https://github.com/hitzzc/go-leetcode/tree/master/super_ugly_number)
231231
#### [315. Count of Smaller Numbers After Self](https://github.com/hitzzc/go-leetcode/tree/master/count_of_smaller_numbers_after_self)
232+
#### [316. Remove Duplicate Letters](https://github.com/hitzzc/go-leetcode/tree/master/remove_duplicate_letters)
232233

233234

234235

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
class Solution {
2+
public:
3+
string removeDuplicateLetters(string s) {
4+
if (s.size() == 0) return "";
5+
unordered_map<char, int> count;
6+
for (int i = 0; i < s.size(); ++i) {
7+
++count[s[i]];
8+
}
9+
unordered_set<char> existed = {s[0]};
10+
vector<char> vec = {s[0]};
11+
--count[s[0]];
12+
for (int i = 1; i < s.size(); ++i) {
13+
--count[s[i]];
14+
if (existed.count(s[i]) == 0) {
15+
while (!vec.empty()) {
16+
char back = vec.back();
17+
if (back <= s[i] || count[back] == 0) break;
18+
vec.pop_back();
19+
existed.erase(back);
20+
}
21+
vec.push_back(s[i]);
22+
existed.insert(s[i]);
23+
}
24+
}
25+
string ret;
26+
for (auto ch: vec) {
27+
ret += ch;
28+
}
29+
return ret;
30+
}
31+
};

0 commit comments

Comments
 (0)