匹配串HDOJ 1711 Number Sequence(KMP)

每日一贴,今天的内容关键字为匹配串

    超等传送门

    KMP,只不过由字符串变长成形整而已,套板模可过。

    S[]寄存主串,T[]寄存匹配串,T[0]和S[0]示表串的长度

    AC代码:

    

    每日一道理
父亲对于儿子来说,是座耸立的高山,而儿子只是颗石子,源于山,却并不了解山。生活中诸多爱的密码,是需用细节来解读的,在亲情的沃土上,要想搞得最美的果实,惟有期待那存在于瞬间的心与心的共鸣,爱与爱的默契。
/*HDOJ1711
作者:陈佳润
2013-05-02*/
#include<stdio.h>

long next[10005];
long S[1000005],T[10005]; 

void Get_next(long T[]){//结构next组数
	int i=1,j=0;
	next[1]=0;
	while(i<T[0]){
		if(j==0||T[i]==T[j]){
			i++;
			j++;
			next[i]=j;
		}
		else
			j=next[j];
	}
}

//s[0]和T[0]保存组数长度
int KMP(long S[],long T[]){
	int i=0,j=0;
	while(i<=S[0]&&j<=T[0]){
		if(j==0||S[i]==T[j]){//
			i++;
			j++;
		}else{
			j=next[j];
		}
	}
	if(j>T[0])
		return i-T[0];//匹配功成,返回肇端位置
	else
		return -1;//匹配失败
}

int main(){
	int i,Time;
	scanf("%d",&Time);
	while(Time--){
		scanf("%d%d",&S[0],&T[0]);
		for(i=1;i<=S[0];i++)
			scanf("%d",&S[i]);
		for(i=1;i<=T[0];i++)
			scanf("%d",&T[i]);
		Get_next(T);
		printf("%d\n",KMP(S,T));
	}
	return 0;
}

文章结束给大家分享下程序员的一些笑话语录: 自从有了Photoshop,我再也不相信照片了!(没有Photoshop的年代,胶片照片年代做假的也不少,那时候都相信假的!)

posted @ 2013-05-03 19:34  坚固66  阅读(130)  评论(0编辑  收藏  举报