Where am I?
题目问的是,给定字符器S,求最小的K,使得S中所有K长的子串没有重复。
解法就是从1开始尝试K,使用一个set
保存所有字符串的子串,如果碰到见过的子串,就试下一个更大的K,直到不出现重复。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n; // <= 100
char s[105];
set<string> m;
int main() {
scanf("%d", &n);
scanf("%s", s);
for (int k = 1; k <= n; k++) {
bool ok = true;
m.clear();
for (int i = 0; i + k <= n; i++) {
char ss[105];
strncpy(ss, s+i, k);
string S(ss);
if (m.find(S) != m.end()) {
ok = false;
break;
}
m.insert(S);
}
if (ok) {
printf("%d", k);
return 0;
}
}
return 0;
}