32 lines
1.1 KiB
C++
32 lines
1.1 KiB
C++
#include <bits/stdc++.h>
|
||
|
||
using namespace std;
|
||
const int N = 26;
|
||
unordered_set<char> S;
|
||
bool st[N];
|
||
string res;
|
||
string s;
|
||
void dfs(int u, string t) {
|
||
if (u == s.size()) { //走完全程
|
||
if (t.size() == S.size()) { //是不是本路径取得的是最小字串的字符串长度,比如是不是4
|
||
if (res == "") //如果是第一次
|
||
res = t; // t就成为大王
|
||
else if (t < res) //否则t需要击败现在的大王res
|
||
res = t;
|
||
}
|
||
return;
|
||
}
|
||
if (!st[s[u] - 'a']) { //如果当前字符没有在本路径中出现过,则可以尝试用上当前的字符
|
||
st[s[u] - 'a'] = true; //标识已用过
|
||
dfs(u + 1, t + s[u]); //下一个位置
|
||
st[s[u] - 'a'] = false; //回溯
|
||
}
|
||
dfs(u + 1, t); //放弃当前位置
|
||
}
|
||
int main() {
|
||
cin >> s;
|
||
for (int i = 0; i < s.size(); i++) S.insert(s[i]); //去重后的最小子串长度为S.size()
|
||
dfs(0, "");
|
||
cout << res << endl;
|
||
return 0;
|
||
} |