问题描述 给你一个字符串,找到最小的没有在字符串中出现的子串。这里的最小是指,长度最小并且字典序小。 思路分析 观察到 n < = 1000 n <= 1000 n<=1000,所以不用想的是,不可能每一个长度为 3 3 3的子串都出现(计算一下很好得出这个结论),所以我们可以用向量把长度为 3 3 3以内的子串储存,然后对每一个在向量中的串在原主串中查找,如果找不到,那么就代表这个子串没有在原主串中出现,输出即可。 代码如下 #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; }