问题描述
- 给你一个字符串,找到最小的没有在字符串中出现的子串。
- 这里的最小是指,长度最小并且字典序小。
思路分析
- 观察到n<=1000n <= 1000n<=1000,所以不用想的是,不可能每一个长度为333的子串都出现(计算一下很好得出这个结论),所以我们可以用向量把长度为333以内的子串储存,然后对每一个在向量中的串在原主串中查找,如果找不到,那么就代表这个子串没有在原主串中出现,输出即可。
代码如下
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e3 + 10;
vector<string> v;
bool cmp(string a, string b)
{
if (a.size() < b.size())
return true;
return a < b;
}
void init()
{
for (char i = 'a'; i <= 'z'; i++)
{
string a;
a += i;
v.push_back(a);
for (char i = 'a'; i <= 'z'; i++)
{
a += i;
v.push_back(a);
for (char i = 'a'; i <= 'z'; i++)
{
a += i;
v.push_back(a);
a.pop_back();
}
a.pop_back();
}
a.pop_back();
}
sort(v.begin(), v.end(), cmp);
}
int main()
{
int n, t;
string a;
init();
cin >> t;
while (t--)
{
cin >> n;
cin >> a;
for (int i = 0; i < v.size(); i++)
{
if (a.find(v[i]) == string::npos)
{
cout << v[i] << endl;
break;
}
}
}
return 0;
}