文字列からすべての重複を削除し、可能な限り辞書編集的に最小の文字列を選択します。たとえば、文字列 cbacdcbc は adcb ではなく acdb を返します。
したがって、辞書編集的に最小の文字列を選択する必要がない場合、これは比較的単純な解決策になりますが、その事実を考慮すると、効率的な解決策にたどり着く方法がわかりません。これが私がこれまでに持っているものです:
string removeDuplicateLetters(string s)
{
vector<bool> v(26,0);
for(int i = 0; i < s.size(); i++) {
v[s[i]-'a'] = 1;
}
string ss = "";
for(int i = 0; i < s.size(); i++) {
if(v[s[i]-'a']) {
ss += s[i];
v[s[i]-'a'] = 0;
}
}
return ss;
}