刷题记录第三十五天-(KMP算法)找出字符串中的第一个匹配项的下标

KMP算法真是刷一次忘一次
#include
using namespace std;
void get_next(vector<int>& next, string s){
	int j=0;
	next[0]=0;
	for(int i=1;i<s.size();i++){
		while(j>0&&s[i]!=s[j]){
			j=next[j-1];
		}
		if(s[i]==s[j])j++;
		next[i]=j;
	}
}
int find(string haystack, string needle){
	vector<int> next=vector<int>(needle.size());
	get_next(next,needle);
	int j=0;
	for(int i=0;i<haystack.size();i++){
		while(j>0&&haystack[i]!=needle[j]){
			j=next[j-1];
		}
		if(haystack[i]==needle[j])j++;
		if(j==needle.size()){
			cout<<i-needle.size()+1;
			break;
		}
	}
} 
int main(){
	string str1="aabaabaaf";
	string str2="aabaaf";
//	vector next=vector(str1.size());
//	get_next(next,str1);
//	for(int num:next){
//		cout<
//	}
	find(str1,str2);
	system("pause");
}

你可能感兴趣的:(每日一题,算法)