给你一个仅包含小写字母的字符串,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证返回结果的字典序最小(要求不能打乱其他字符的相对位置)。
示例 1:
输入: "bcabc"
输出: "abc"
示例 2:
输入: "cbacdcbc"
输出: "acdb"
class Solution {
public:
string removeDuplicateLetters(string s) {
vector<int> vec(256,0);
vector<bool> visited(256,0);
for(char c : s)
vec[c]++;
string res = "";
for(char c : s){
vec[c]--;//每次遍历一个字符就将他出现的次数减一
if(visited[c])//标记是否访问过
continue;
//如果结果字符串尾端的字符比将要插入字符大,而且后面字符串中还有这个字符,就弹出。
while(vec[res.back()] && c < res.back()){
visited[res.back()] = false;
res.pop_back();
}
res += c;
visited[c] = true;
}
return res;
}
};