您的位置:首页 > 其它

ACdream HUT新生摸底训练赛 D - 娜娜梦游仙境系列——村民的怪癖 KMP

2015-04-13 19:32 309 查看
解题思路:用next数组进行跳转次数统计。

解题代码:

// File Name: d.cpp
// Author: darkdream
// Created Time: 2015年04月12日 星期日 19时40分52秒

#include<vector>
#include<list>
#include<map>
#include<set>
#include<deque>
#include<stack>
#include<bitset>
#include<algorithm>
#include<functional>
#include<numeric>
#include<utility>
#include<sstream>
#include<iostream>
#include<iomanip>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<ctime>
#define LL long long

using namespace std;
int n ;
int t;
char str[300000];
int len ;
int next[300000];
void get_next()
{
next[0] = -1;
int k = -1;
int j =0 ;
while(j < len )
{
if(k == -1 || str[j] == str[k])
{
++ k ;
++ j ;
next[j] = k ;
}else{
k = next[k];
}
}
}
int find(int x)
{
if(x == 0)
return 0;
return 1+find(next[x]);
}
int main(){
scanf("%d",&t);
while(t--)
{
scanf("%s",str);
len = strlen(str);
scanf("%s",&str[len]);
len = strlen(str);
get_next();
printf("%d\n",find(len));
}
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: