Given a string which contains only lowercase letters, remove duplicate letters so that every letter appear once and only once. You must make sure your result is the smallest in lexicographical order among all possible results.
去掉字符串中重复的字符,并以字典序排列
用数组letters记录字母出现的次数,visited记录相应字母是否出现在结果中,字符串result记录结果。保证字典序较小的字符永远排列在前面。
string removeDuplicateLetters(string s) {
vector<int> letters(28,0);
vector<bool> visited(28,false);
for(int i=0;i<s.size();i++)
{
letters[s[i]-'a']++;
}
string result="0";
for(int i=0;i<s.size();i++)
{
letters[s[i]-'a']--;
if(visited[s[i]-'a'])
continue;
while(s[i]<result.back()&&letters[result.back()-'a'])
{
visited[result.back()-'a']=false;
result.pop_back();
}
result+=s[i];
visited[s[i]-'a']=true;
}
return result.substr(1);
}