描述

给定两个字符串A和B,请你求出字符串A最少重复几次才能使得B是A的子串。

例如A="hiho",B="hohihohi"。则A重复3次之后变为"hihohihohiho",这时B是A的子串。

输入

输入包含多组数据。

第一行包含一个整数T,表示数据组数。 (1 ≤ T ≤ 5)

对于每组数据,第一行包含一个字符串A,第二行包含一个字符串B。

对于30%的数据,1 ≤ |A|, |B| ≤ 1000

对于100%的数据, 1 ≤ |A|, |B| ≤ 100000 并且A和B都只包含小写字母。

输出

A最少重复的次数。如果无论重复多少次也不能包含B,输出-1。

样例输入

2
hiho
hohihohi
hiho
coder

样例输出

3
-1

思路:一直重复A字符串(有上限),看是否可以达到k==lenb。

没必要枚举起点,一位任何一位A[i]都可以做起点,所以最多多加一个循环。 即次数不超过 ((lenb-1)/lena+1) +1 。

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=;
int Next[maxn],ans;
char a[maxn],b[maxn];
void kmp()
{
int k=,lena=strlen(a+),lenb=strlen(b+);
ans=-; Next[]=;
for(int i=;i<=lenb;i++){
while(k&&b[i]!=b[k+]) k=Next[k];
if(b[i]==b[k+]) k++;
Next[i]=k;
}
k=;
for(int p=;p<=(lenb-)/lena+;p++){
for(int i=;i<=lena;i++){
while(k&&a[i]!=b[k+]) k=Next[k];
if(a[i]==b[k+]) k++;
if(k==lenb) { ans=p; return ;}
}
}
}
int main()
{
int T; scanf("%d",&T);
while(T--){
memset(Next,,sizeof(Next));
scanf("%s%s",a+,b+);
kmp();
printf("%d\n",ans);
} return ;
}

Hihocoder 1625 : 重复字符串匹配 (KMP)的更多相关文章

  1. 字符串匹配KMP算法详解

    1. 引言 以前看过很多次KMP算法,一直觉得很有用,但都没有搞明白,一方面是网上很少有比较详细的通俗易懂的讲解,另一方面也怪自己没有沉下心来研究.最近在leetcode上又遇见字符串匹配的题目,以此 ...

  2. 字符串匹配-KMP

    节选自 https://www.cnblogs.com/zhangtianq/p/5839909.html 字符串匹配 KMP O(m+n) O原来的暴力算法 当不匹配的时候 尽管之前文本串和模式串已 ...

  3. 字符串匹配--kmp算法原理整理

    kmp算法原理:求出P0···Pi的最大相同前后缀长度k: 字符串匹配是计算机的基本任务之一.举例,字符串"BBC ABCDAB ABCDABCDABDE",里面是否包含另一个字符 ...

  4. 字符串匹配KMP算法的C语言实现

    字符串匹配是计算机的基本任务之一. 举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD" ...

  5. 字符串匹配KMP算法的讲解C++

    转自http://blog.csdn.net/starstar1992/article/details/54913261 也可以参考http://blog.csdn.net/liu940204/art ...

  6. 字符串匹配KMP算法(转自阮一峰)

    转自 http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm.html 字符串匹配是计算 ...

  7. zstu.4194: 字符串匹配(kmp入门题&& 心得)

    4194: 字符串匹配 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 206  Solved: 78 Description 给你两个字符串A,B,请 ...

  8. 字符串匹配KMP算法

    1. 字符串匹配的KMP算法 2. KMP算法详解 3. 从头到尾彻底理解KMP

  9. 【Foreign】字符串匹配 [KMP]

    字符串匹配 Time Limit: 10 Sec  Memory Limit: 256 MB Description Input Output Sample Input 3 3 6 3 1 2 1 2 ...

随机推荐

  1. ASP复制文件

    <% dim fs,oldpath,newpath Set fs=Server.CreateObject("Scripting.FileSystemObject") oldp ...

  2. BZOJ 3727 PA2014 Final Zadanie 树形DP

    题目大意:给定一棵树,令一个点到全部点的距离与点权的乘积之和为b[i].求每一个点的权值a[i] 首先假设给定a[i]我们能够非常轻松的求出b[i] 可是反过来怎么搞?高斯消元?30W? 考虑已知a[ ...

  3. Solaris作业管理

    凌晨2点重启数据库 每周晚23点后都需要做备份工作 所有这些都需要作业.这时候数据库压力没那么大. 作业就像是闹钟,可以有一次性计划任务,也有重复性计划任务. 计划任务管理 ----at At [-m ...

  4. Cursor类用法:

      Cursor类用法:   http://www.2cto.com/kf/201109/103163.html   Ctrl+Shift+G 查找类.方法和属性的引用.这是一个非常实用的快捷键,例如 ...

  5. c#列表操作

    Enumerable[从元数据]   //        // 摘要:         //     从序列的开头返回指定数量的连续元素.        //        // 参数:        ...

  6. windown vs2012 编译ffplay

    自己写的播放器播放有些文件出现问题,但ffplay播放都很正常,为方便调试,将ffplay.c编译成可执行文件. 一. 环境搭建 环境搭建前面已经有文章介绍,没有特殊的地方,不再赘述. 二.修改con ...

  7. QQ空间g_tk、bkn加密参数算法

    g_tk是腾讯在QQ空间这一领域使用的密文,有写数据包或者url参数中需要加入你计算出的g_tk才能成功! 下面是通过浏览器抓包工具抓取 访问该js内容找出 QZONE.FrontPage.getAC ...

  8. Thrift安装介绍

    一.简介 1.语言库要求 因为thrift支持多语言.所以编译thrift源代码的过程中,会用到该语言的一些类库.如c++的boost.java的jdk等. 那么,在安装thrift过程中,须要对各种 ...

  9. 【Sprint2 每日Scrum】 第一天(4.22)Sprint2计划会议成果

    Sprint2计划会议成果 从今天起我们就开始正式的Sprint2之旅了,经过上一次Sprint1的冲刺计划和几天的调整,我们已经大致了解了敏捷开发的流程和思想,并将我们的TD学生助手做出了大致的框架 ...

  10. leetcode第一刷_Symmetric Tree

    必须承认,一開始这道题我是不会做的.由于我心目中的树遍历仅仅能用一个节点发起.多么天真而无知. 我想不通如何同一时候遍历两颗子树.由于根节点一定是一个啊.但是,作为对称轴上的它.从一開始就不应该被考虑 ...