1 条题解
-
0
就没有人想到这个简单的三FOR方法吗?
那我就来分享一下:
通过理解题目,我们可以发现,k这是越小越好的。
-
所以我们可以直接判断字符串内任意连续k位的所有子串有没有重复。
-
有就继续枚举下一个k没有,那就输出当前枚举的k即可。
-
k的最大范围就是字符串长度(就只有一种情况,别告诉我还不能确定)
方法简单,思路明了,程序就更不在话下了。
#include<iostream> #include<cstdio> #include<string> #include<cstring> using namespace std; string s;int len; bool ck(int x) { for(int i=0;i<len-x+1;i++) { string ss=s.substr(i,x);//记录当前枚举的连续k位的数字。 int num=0; for(int j=0;j<len-x+1;j++)//枚举找重复。 if(s.substr(j,x)==ss)num++;//记录重复次数 if(num>1)return false;//如果有重复那就证明不符合。(除去它本身一个) } return true;//所有的都不重复,返回true。 } int main() { cin>>len>>s; for(int i=1;i<=len;i++)//枚举最小k if(ck(i)){cout<<i;return 0;}//判断符不符合条件。 return 0; } -
- 1
信息
- ID
- 6928
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 7
- 标签
- 递交数
- 88
- 已通过
- 21
- 上传者