题解 | #String Matching#

String Matching

http://www.nowcoder.com/practice/00438b0bc9384ceeb65613346b42e88a

#include <cstdio>
#include <iostream>
#include <string>

using namespace std;

void get_next(const string &t, int *next){
	int i=1, j=0;
	next[1] = 0;
	while(i<=t.size()){
		if(j==0 || t[i] == t[j]){
			i++;j++;
			next[i] = j;
		}else{
			j = next[j];
		}
	}
	return;
}

int KMP_47(const string &s, const string &t, int pos){
	int i = pos;
	int j = 1;
	int next[t.size()];
	get_next(t, next);
	int num = 0;
//	while(i<s.size()&&j<=t.size()) s下标从0开始,t下标从1开始 这是原KMP算法,返回的是第一个匹配到的字串的首位位置
	while(i < s.size()){
		if(j==0 || s[i] == t[j-1]){//t实际下标从0开始 
			i++;j++;
		}else{
			j=next[j];
		}
		if(j-1 == t.size()){//检查“匹配成功”  成功则计数,并“假设为失败”来高效地往后跳 
			num++;
			j = next[j-1];
			i--;
		}
	}
	return num; 
}

int main(){
	string s,t;
	while(cin >> s >> t){
		printf("%d\n",KMP_47(s,t,0));
		s.clear();
		t.clear();
	}
	return 0;
}
全部评论

相关推荐

09-14 17:23
门头沟学院
故事和酒66:所以说副业很重要,程序员干到40岁,再怎么也赚300万了,吃吃利息也够活下去
点赞 评论 收藏
分享
09-01 11:31
门头沟学院 Java
buul:七牛云的吧,感觉想法是好的,但是大家没那么多时间弄他这个啊。。。不知道的还以为他是顶尖大厂呢还搞比赛抢hc,只能说应试者的痛苦考察方是无法理解的,他们只会想一出是一出
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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