您的位置:首页 > 其它

SSL-ZYC 2575 给出字符串

2018-03-10 15:26 225 查看
题目大意:

给出一个由小写字母组成的字符串。你的任务是找出其最长的出现至少两次的子串的长度。

思路:

纯模拟。

这道题我用的是O(n^4)的方法。前两个循环分别枚举两个子串的起始位置,第三个循环枚举这两个字串的长度,最后一个循环用来比较两个子串是否相同。加上一点优化,AC!

代码:

#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;

char a[201],b[201],c[201];
int n,maxn;

int main()
{
scanf("%s",&a);
n=strlen(a);
for (int i=0;i<=n-2;i++)
{
for (int j=i+1;j<=n-1;j++)  //枚举子串开始位置
{
for (int k=1;k<=n-1;k++)  //字串长度
{
int ok=1;
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
for (int q=1;q<=k;q++) b[q]=a[q+i-1];
for (int q=1;q<=k;q++)
{
c[q]=a[q+j-1];
if (c[q]!=b[q])  //如果与另一个字串不相同
{
ok=0;
break;  //退出
}
}
if (ok==1&&k>maxn) maxn=k;
else if (ok==0) break;
}
}
}
printf("%d\n",maxn);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: