pid=3746">点击打开链接

题意:给T组数据,每组一个字符串,问最少加入多少个字符能够使这个串变成一个子串连续出现的串

思路:利用KMP的next数组进行变换,next数组保存的是眼下为止与字符串从头開始的匹配的程度,也能够看成从头開始的位置。所以假设Next数组最后一个为0,则须要在加入一个这种串才干匹配成功。不然ans=len-Next[len]代表的是不能匹配的后面的串的长度。假设这个长度能够被len取余,则说明这个串已经匹配好了,不然就是这个长度减去取余后的数

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <algorithm>
using namespace std;
typedef long long ll;
const int inf=0x3f3f3f3f;
const int maxn=200010;
const int mod=10007;
char str1[maxn];
int Next[maxn];
void makenext(int m){
int i=0,j=-1;
Next[i]=-1;
while(i<m){
if(j==-1||str1[i]==str1[j])
Next[++i]=++j;
else j=Next[j];
}
}
//int KMP(int n,int m){
// int i=0,j=0,ans=0;
// while(i<n){
// if(j==-1||str2[i]==str1[j]) i++,j++;
// else j=Next[j];
// if(j==m){
// ans++;j=Next[j-1];i--;
// }
// }
// return ans;
//}
int main(){
int T,n;
scanf("%d",&T);
while(T--){
scanf("%s",str1);
int len=strlen(str1);
makenext(len);
if(Next[len]==0){
printf("%d\n",len);
continue;
}
int ans=len-Next[len];
if(len%ans==0) printf("0\n");
else printf("%d\n",ans-len%ans);
}
return 0;
}

最新文章

  1. 菜鸟学Struts2——零配置(Convention )
  2. 常用数据库的驱动程序和Url地址
  3. sorl入门
  4. js执行环境的深入理解
  5. 在MyEclipse显示struts2源码和doc文档及自动完成功能
  6. Windows Live Writer 初次使用
  7. 学DIV+CSS技术,如何入门?(2)
  8. ajax 例子
  9. 学会自己写jQuery插件(一)---基础
  10. Sql 执行删除修改之前添加备份
  11. laravel code bright
  12. codeblocks创建和使用静态库(C语言)
  13. CSS圆角样式
  14. erlang 初体验
  15. Webdriver+Java实现使用cookie跳过登录
  16. Nginx动静分离实现
  17. JavaEE三大框架整合
  18. 一次基于Vue.Js的用户体验优化 (vue drag)
  19. M0内核的STM32实现比较精准的延时
  20. 【Jmeter基础知识】Jmeter的三种参数化方式

热门文章

  1. Ext如何动态添加一行组件
  2. NSArray与NSMutableArray 数组与可变数组的创建和遍历 复习
  3. Changing the Output Voltage of a Switching Regulator on the Fly
  4. Jquery实现可拖拽的树菜单
  5. Java:终结器防卫者,顺便看一下 C# 如何做的。
  6. 负载均衡---在window与linux下配置nginx
  7. 单击行,自己主动选中当前行中的单选框button
  8. XML 简单介绍
  9. 在Qt示例项目的C ++ / QML源中的//! [0]的含义是什么?
  10. C#的四个基本技巧