描述
给定一个仅包含小写字母的字符串,去除字符串中重复的字母,使得每个字母只出现一次。需保证返回结果的字典序最小(要求不能打乱其他字符的相对位置)。
示例 1:
输入: “bcabc”
输出: “abc”
示例 2:
输入: “cbacdcbc”
输出: “acdb”
思路
遍历s中的每一个字符,因为我们的结果集的字典序需要最小,所以如果这个字符比结果集中最后一个字符小而且结果集的最后一个字符在输入字符串的后面还会出现,就弹出这个字符,循环这个过程,直到遇到不可删除(也就是后面没有)或者该字符大于结果集最后一个字符。
class Solution {
public:
string removeDuplicateLetters(string s) {
int vis[256]{};//访问位
int cnt[256]{};//统计数量
string res="0";
for(char a:s)cnt[a]++;
for(char a:s){
--cnt[a];
if(vis[a])continue;
while(a<res.back()&&cnt[res.back()]){
vis[res.back()]=0;
res.pop_back();
}
vis[a]=1;
res+=a;
}
return res.substr(1);
}
};