hiho 1625 重复字符串匹配 [Offer收割]编程练习赛35 Problem C KMP模板题

题目3 : 重复字符串匹配

时间限制: 10000ms
单点时限: 1000ms
内存限制: 256MB

描述

给定两个字符串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
KMP模板题,先让A长度大于等于B,比较一下,不行就再加一个A,比较一下。。。。其实做一遍KMP就够了,这里为了不探讨匹配的位置,多做了一遍KMP


#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;

int T;
string A,B;

/*
class Solution(object):
    def strStr(self, haystack, needle):
        """
        :type haystack: str
        :type needle: str
        :rtype: int
        """
        if needle=="":return 0
        Len1=len(haystack)
        Len2=len(needle)
        if Len2>Len1:return -1
        Next=[0]*(Len2+1)
        i=0
        j=0
        t=-1
        Next[0]=-1
        while j>T;
    while(T--){
        cin>>A>>B;
//        cout<_/___.' >' "".
//         | | :  `- \`.;`\ _ /`;.`/ - ` : | |
//         \  \ `_.   \_ __\ /__ _/   .-` /  /
//     =====`-.____`.___ \_____/___.-`___.-'=====
//                       `=---='
//
//
//     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
//               佛祖保佑         永无BUG
//
//
//



你可能感兴趣的:(刷题)