FZU 1481 KMP
2012-05-04 14:33
246 查看
【题目大意】
判断两条环形字符串是否相同。
【思路】
将待匹配串复制一份接在后面,再用模式串做KMP,若能找到说明为同一个串。
蛮久没写KMP了,算法忘得差不多了..
小悲剧啊~
【CODE】
#include<iostream>
#include<cstdio>
using namespace std;
char t[222],s[444];
int next[222];
void setNext()
{
next[0]=-1;
int j=0,k=-1;
while( j<strlen(t) )
{
if( k==-1||t[j]==t[k] )
next[++j]=++k;
else k=next[k];
}
}
bool judge()
{
int l1=strlen(s),l2=strlen(t);
int i=0,j=0,k;
while( i<l1&&j<l2 )
{
if( j==-1||s[i]==t[j] )
i++,j++;
else
j=next[j];
}
return j==l2;
}
int main()
{
while( scanf("%s",&t)!=EOF )
{
setNext();
int sum=0,n;
scanf( "%d",&n );
while( n-- )
{
memset( s,0,sizeof(s) );
scanf( "%s",&s );
if( strlen(t)!=strlen(s) )
continue;
int len=strlen(s);
for( int i=0;i<len;i++ )
s[len+i]=s[i];
s[len<<1]=0;
if( judge() )
sum++;
}
printf( "%d\n",sum );
}
return 0;
}
判断两条环形字符串是否相同。
【思路】
将待匹配串复制一份接在后面,再用模式串做KMP,若能找到说明为同一个串。
蛮久没写KMP了,算法忘得差不多了..
小悲剧啊~
【CODE】
#include<iostream>
#include<cstdio>
using namespace std;
char t[222],s[444];
int next[222];
void setNext()
{
next[0]=-1;
int j=0,k=-1;
while( j<strlen(t) )
{
if( k==-1||t[j]==t[k] )
next[++j]=++k;
else k=next[k];
}
}
bool judge()
{
int l1=strlen(s),l2=strlen(t);
int i=0,j=0,k;
while( i<l1&&j<l2 )
{
if( j==-1||s[i]==t[j] )
i++,j++;
else
j=next[j];
}
return j==l2;
}
int main()
{
while( scanf("%s",&t)!=EOF )
{
setNext();
int sum=0,n;
scanf( "%d",&n );
while( n-- )
{
memset( s,0,sizeof(s) );
scanf( "%s",&s );
if( strlen(t)!=strlen(s) )
continue;
int len=strlen(s);
for( int i=0;i<len;i++ )
s[len+i]=s[i];
s[len<<1]=0;
if( judge() )
sum++;
}
printf( "%d\n",sum );
}
return 0;
}
相关文章推荐
- fzu 1901 Period II (KMP)
- FZU 1901 Period II (kmp)
- FZU 1901 KMP找前后缀等串
- FZU 1901+kmp的next数组的应用
- FZU 1901 Period II (KMP)
- FZU 2122 ——又见LKity——————【KMP字符串匹配】
- FZU 2122(KMP)
- FZU 1901 Period II(KMP)
- FZU 1011 Power Strings(KMP匹配算法)
- FZU 1901 Period II(KMP)
- FZU 1481 环串
- 【FZU - 2275 】Game 【KMP and 博弈】
- KMP入门题 Hdu 1711 2594 3746 HUST 1010 Poj 3461 2752 2406 1961 FZU 1901
- FZU 题目1901 Period II (KMP)
- Fzu Problem 1901 Period II (kmp)
- FZU Problem 1926 填空(KMP好题一枚,确实好)
- FZU-1926+KMP
- fzu 1901 Period II(KMP)
- FZU - 2128 最长子串(KMP?)
- fzu 1926 填空 【kmp字符串匹配】