DD 现在有一个长度为 n 的字符串,DD 认为如果所有长度为 x 的子串互不重复,则 x 这个值是可识别的,他现在想知道最小的可识别值是多少
输入格式
第一行一个整数表示 n
第二行一个长度为 n 的字符串
输出格式
输出 xx 的最小值
数据范围
对于 30% 的数据,1≤n≤10
对于 60% 的数据,1≤n≤100
对于 100% 的数据,1≤n≤1000
输出时每行末尾的多余空格,不影响答案正确性
样例输入 复制
6
xyzxyz
样例输出 复制
4
#include<bits/stdc++.h>
using namespace std;
#define N 10005
int n, lens;
string s, tmp[1005];
bool cmp(int x){//找出所有长度为x的字符串
int k = 0;
for(int i=1; i<=lens; ++i)//所有字符串清空
tmp[i] = "";
for(int i=0; i<lens; ++i){//每一个字符串的开始下标
++k;
if(x+i <= lens){
for(int p=i; p<x+i; p++)//每个字符串的形成
tmp[k] += s[p];
}else
break;
}
sort(tmp+1, tmp+k+1);
for(int i=1; i<=k; ++i){//判断是否有相等字符串
if(tmp[i] == tmp[i+1])
return false;
}
return true;
}
int main(){
scanf("%d", &n);
cin >> s;
lens = s.size();
for(int j=1; j<=lens; ++j){
if(cmp(j)){
cout << j;
break;
}
}
return 0;
}