题目要求的是字典序最小的结果。只需要理解一点就是按大小顺序排列的字符串的字典序就是最小的,如“abcd”这种。
解题思路如下:
class Solution {
public:
string removeDuplicateLetters(string s) {
int n=s.size();
vector<bool> visited(26);
vector<int> last(26);
for(int i=0;i<n;i++){
last[s[i]-'a']=i;
}
stack<char> stk;
for(int i=0;i<n;i++){
if(visited[s[i]-'a'])continue;
if(!stk.empty())
while(!stk.empty()&&s[i]<stk.top()&&last[stk.top()-'a']>i){
visited[stk.top()-'a']=false;
stk.pop();
}
stk.push(s[i]);
visited[s[i]-'a']=true;
}
string result(stk.size(), 'c' );
for(int i=stk.size()-1;i>=0;i--){
result[i]=stk.top();
stk.pop();
}
return result;
}
};