CF126B Password

题意:

给出一个字符串 H,找一个最长的字符串 h,使得它既作为前缀出现过、又作为后缀出现过、还作为中间的子串出现过。

解法:

沿着 $ next_n $ 枚举字符串,如果这个值在 $ next_I (i < n)$ 中出现合法。

预处理出 $ next $ 数组后记录那些值在 $ next $ 当中出现过,从 $ next_n $ 开始判断,如果不合法则从i 跳到 $ next_i $ 继续判断。

CODE:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<set> using namespace std; const int N = 1e6 + 10; set<int > st;
int len,nxt[N];
char ch[N];
bool flag; void kmp() {
nxt[0] = nxt[1] = 0;
for(int i = 1 ; i <= len ; i++) {
int j = nxt[i];
while(j && ch[i] != ch[j]) j = nxt[j];
nxt[i + 1] = (ch[j] == ch[i] ? j + 1 : 0);
}
} int main() {
scanf("%s",ch+1);
len = strlen(ch + 1);
kmp();
st.clear();
for(int i = 1 ; i <= len ; i++)
st.insert(nxt[i]);
flag = 0;
int j = len;
while(nxt[j]) {
if(st.count(nxt[j])) {
flag = 1;
for(int i = 1 ; i <= nxt[j] ; i++)
printf("%c",ch[i]);
puts("");
break;
}
j = nxt[j];
}
if(!flag) puts("Just a legend");
return 0;
}

最新文章

  1. angular路由详解:
  2. Redis 主从配置
  3. VBA_Excel_教程:Option,错误处理
  4. 移动零售批发行业新的技术特色-智能PDA手持移动扫描打印销售开单收银仪!!
  5. PHP使用Xdebug进行远程调试
  6. regsvr32 注册.dll的用法
  7. bzoj 1185 旋转卡壳 最小矩形覆盖
  8. JS获取事件源对象
  9. 核心业务系统数据库平台迁移: Oracle -&gt; MySQL
  10. [转] Linux文件系统之hard link&amp;symbol link
  11. This application failed to start because it could not find or load the Qt platform plugin &amp;quot;xcb&amp;quot;.
  12. javascript 中 apply(或call)方法的用途----对象的继承
  13. C#的内存管理原理解析+标准Dispose模式的实现
  14. 安卓中的事件分发机制之View控件
  15. jquery 第二章
  16. [c/c++] programming之路(27)、union共用体
  17. 转载 -- CSS3 中关于 select 下拉列表的样式
  18. 信用评分及模型原理解析(以P2P网贷为例)
  19. 【AI】基本概念-准确率、精准率、召回率的理解
  20. 实战ELK(2) ElasticSearch 常用命令

热门文章

  1. Mac下Vim编辑快捷键小结(移动光标)
  2. mybatis插入数据后返回自增的主键id
  3. Prometheus Node_exporter
  4. Python字符编码以及循环机制介绍
  5. powerdesigner中反向postgresql
  6. 一个简单的使用Quartz和Oozie调度作业给大数据计算平台执行
  7. vue自学入门-2(vue创建项目)
  8. linq to xml 简单的增、删、改、查、保存xml文件操作
  9. gulp+webpack构建配置
  10. 复习python