原题目
题目分析
栈
class Solution {
public:
string smallestSubsequence(string text) {
int count[26]={0};
int used[26]={0};
for(auto c : text){
count[c-'a']++;
}
string res;
for(auto c : text){
if(used[c-'a']==0){
while(res.size()>0&&count[res[res.size()-1]-'a']>0&&res[res.size()-1]>c){
used[res[res.size()-1]-'a'] = 0;
res.pop_back();
}
res += c;
used[c-'a'] = 1;
}
count[c-'a']--;
}
return res;
}
};
使用string
class Solution {
public:
string removeDuplicateLetters(string s) {
string res;
for(int i = 0; i < s.size(); i++){
if(res.find(s[i])!=-1)continue;
while(res.size()>0&&res.back()>s[i]&&s.find(res.back(),i)!=-1){
res.pop_back();
}
res += s[i];
}
return res;
}
};
递归
class Solution {
public:
string removeDuplicateLetters(string s) {
vector<int>count(26);
for(auto c:s){
count[c-'a']++;
}
int pos = 0;
for(int i = 0; i < s.size(); i++){
if(s[i] < s[pos])pos = i;
if(--count[s[i]-'a']==0)break;
}
string s1;
for(int i = pos+1; i < s.size(); i++){
if(s[i] != s[pos]){
s1 += s[i];
}
}
return s.length() == 0?"" : s[pos]+removeDuplicateLetters(s1);
}
};