Prinzessin der Verurteilung - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
![](https://img-blog.csdnimg.cn/img_convert/52c88dd212ce47fba1c116c005ee215a.png)
找到长度,字典序最小的串,不是题目所给串的某个前缀子串
长度为2的串共有 26 +26^2 < 1000
长度为3的串共有 26 + 26^2 + 26 ^3> 1000
所以最多枚举到 长度为3 的串即可
#include <bits/stdc++.h>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <set>
#define x first
#define y second
#define ios ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
using namespace std;
typedef pair<int,int> PII;
typedef pair<char,int> PCI;
typedef long long LL;
//typedef __int128 i128;
typedef unsigned long long ULL;
const int N=2e5+10,INF = 1e9 ;
const double eps = 1e-7;
int n;
string s;
void solve()
{
set<string> se;
cin >> n >> s ;
for(int i=0;i < n;i ++ )
{
string str;
for(int k=0;k<3 && i + k < n ;k ++ )
{
str+=s[i+k];se.insert(str);
}
}
for(int len=1;len<=3;len ++ )
{
string t(len,'a');// 构造长度为len的 aaa串
while(1)
{
if(!se.count(t))
{
cout<<t <<endl;return;
}
int idx= len - 1;
while(idx >= 0 && t[idx] == 'z')
{
t[idx ] = 'a';idx--;
//当前枚举的位置已经从a到z都枚举了一遍,继续枚举前面的位置
}
if(idx < 0) break;
t[idx] ++ ; // 当前位置 枚举下一个字符
}
}
}
int main()
{
// freopen("1.txt","r",stdin);
ios
LL T=1;
cin>>T;
while(T -- )
{
solve();
}
return 0;
}