题目
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/7c17d6d46201d42e970400c80b984e08.png)
Leetcode 316. 去除重复字母
代码(8.30 首刷看解析)
class Solution {
public:
string removeDuplicateLetters(string s) {
vector<int> vis(26), num(26);
for(char ch : s)
num[ch-'a']++;
string sk;
for(char ch : s) {
if(!vis[ch-'a']) {
while(!sk.empty() && sk.back() > ch) {
if(num[sk.back()-'a'] > 0) {
vis[sk.back()-'a'] = 0;
sk.pop_back();
} else {
break;
}
}
vis[ch-'a'] = 1;
sk.push_back(ch);
}
num[ch-'a']--;
}
return sk;
}
};
代码(9.25 二刷看解析)
class Solution {
public:
string removeDuplicateLetters(string s) {
vector<int> num(26), vis(26);
for(char c : s)
num[c-'a']++;
string ans;
for(char c : s) {
if(!vis[c-'a']) {
while(!ans.empty() && ans.back() > c) {
if(num[ans.back()-'a'] > 0) {
vis[ans.back()-'a'] = 0;
ans.pop_back();
} else {
break;
}
}
vis[c-'a'] = 1;
ans.push_back(c);
}
num[c-'a']--;
}
return ans;
}
};