Codeforces 126B. Password



题意:一个字符串,找出最长的子串t,它既是前缀又是后缀,还出现在中间。输出t,不存在则输出Just a legend。

思路:利用KMP算法处理出next数组,由next数组的意义可以知道i为尾的最长相同前缀后缀。则ne[n-1],ne[ne[n-1]],ne[ne[ne[n-1]]]......均为可能的解,且长度递减,为了高效的逐一验证,则需要预处理出整个字符串有多少个与该前缀相同的子串。用到DP思想,cnt[next[i]]+=cnt[i],倒着更新一遍,即可处理出上述信息。那么cnt大等于3的前缀,均为可行解

代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string>
#define dd(x) cout<<#x<<" = "<<x<<" "
#define de(x) cout<<#x<<" = "<<x<<"\n"
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
using namespace std;
typedef long long ll;
typedef long double ld;
const int maxn=1e6+10,mod=1e9+7,INF=0x3f3f3f3f;
char s[maxn];
int ne[maxn],cnt[maxn];
void init()
{
ne[0]=-1;
for (int i=1;s[i];++i)
{
int j=ne[i-1];
while (s[j+1]!=s[i]&&j>=0)
j=ne[j];
if (s[j+1]==s[i])
ne[i]=j+1;
else
ne[i]=-1;
}
}
int main()
{
scanf("%s",s);
init();
int n=strlen(s);
for (int i=0;i<n;++i)
cnt[i]=1;
for (int i=n-1;i;--i)
cnt[ne[i]]+=cnt[i];
for (int i=ne[n-1];i!=-1;i=ne[i])
{
if (cnt[i]>=3)
{
for (int j=0;j<=i;++j)
printf("%c",s[j]);
return 0;
}
}
printf("Just a legend");
return 0;
}

最新文章

  1. jQuery倒计时插件
  2. velocity模板入门
  3. W3School-CSS 背景实例
  4. [译] libvirt 虚机的生命周期 (Libvirt Virtual Machine Lifecycle)
  5. eclipse启动无响应,停留在Loading workbench状态,或老是加载不了revert resources
  6. 深入浅出话VC++(2)——MFC的本质
  7. python DB.fetchall()--获取数据库所有记录列表
  8. 镜像渐变-radio-gradient
  9. Dynamic - ExpandoObject学习心得
  10. 微信小程序资料集合
  11. Win8 弹出窗口不在最前端的解决方法
  12. laravel无法显示路由界面
  13. C#判断某个类是否派生某个类或是否实现了某个接口
  14. AngularJS 全局scope与指令 scope通信
  15. (三)Javascript面向对象编程:非构造函数的继承
  16. 编译u-boot问题总结
  17. python用类装饰函数的一个有趣实现
  18. Leetcode 1020. 将数组分成和相等的三个部分
  19. install the Mondo Rescue utility in Ubuntu 12.04 or 12.10.
  20. spring配置和下载

热门文章

  1. 牛客 133D 挑选队友 (分治FFT)
  2. Apache开启.htaccess 支持
  3. c# http文件上传
  4. 配置UOJ数据的正确姿势
  5. 使用 pdb 进行调试
  6. LeetCode:627.交换工资
  7. JDBC 插入时间字段的值
  8. Python3简易接口自动化测试框架设计与实现(中)
  9. jumpserver跳板机docker安装小小趟坑
  10. 8. Object References, Mutability, and Recycling