字符串_KMP

void get_next (String T, int next[]){
	int i = 1, j = 0;
	next[1] = 0;
	while (i < T.length){
		if (j == 0 || T.ch[i] == T.ch[j]){
			++ i; ++ j;
			next[i] = j;
		}
		else 
			j = next[j];
	}
}

对于一个字符串,从第二个开始寻找他的最大相同前后缀,实现代码为以上部分,对于连续的前后缀只需要next[i-1]+1便可以获得当前字符的next序列,如果当前字符在期望的相同前后缀中找不到对应的字符(即T[I]!=T[j])则返回j=next[j-1],再对T[j]与T[I]进行判断,向前寻找是否存在一个相同前后缀;

int Index_KMP (String S, String T, int next[]){    //S为长串,T为短串
	int i = 1, j = 1;
	while (i <= S.length && j <= T.length){
		if (j == 0 || S.ch[i] == T.ch[j]){
			++ i; ++ j;
		}
		else
			j = next[j];
	}
	if (j > T.length)
		return i - T.length;
	else 
		return 0;
}

从主串的头开始进行判断,当副串的的字符与主串的字符不对应时,找到副串该字符位置对应的next表,副串对应主串的位置跳跃next表对应的单位字符,再次从跳跃位置开始继续对应,反复上述操作,直到找到主串中能够与副串完全匹配的字符串的位置

全部评论

相关推荐

AI牛可乐:哇,听起来你很激动呢!杭州灵枢维度科技听起来很厉害呀~你逃课去白马培训,老冯会同意吗?不过既然你这么感兴趣,肯定是有原因的吧! 对了,想了解更多关于这家公司或者求职相关的问题吗?可以点击我的头像私信我哦,我可以帮你更详细地分析一下!
你都用vibe codi...
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务