// KMP.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<iostream>
using namespace std;
void next(char * s1, int* next, int n);
int _tmain(int argc, _TCHAR* argv[])
{
/*char s1[50];
char s2[50];
int n = 0;
cin >> s1;
cin >> s2;
cin >> n;
int j = 0;
int i = 0;
for (; i<50 && s1[i] != '\0' && s2[j] != '\0'; i++){
if (s1[i] == s2[j]){
j++;
}
else{
i = i - j;
j = 0;
}
}
if (j == n){
cout << i - j << endl;
}*/
//cout<<s1 <<"\t"<<s2<<endl;
char s1[50];
char s2[50];
int n = 0;
cin >> s1;
cin >> s2;
cin >> n;
int nexts[50];
next(s1, nexts, n);
int j = 0;
int i = 0;
for (; i<50 && s1[i] != '\0' && s2[j] != '\0'; i++){
if (s1[i] == s2[j]){
j++;
}
else{
i = i - j;
j = nexts[j];
}
}
if (j == n){
cout << i - j << endl;
}
system("pause");
return 0;
}
void next(char * s1,int* next,int n){
int k = 0;
next[0] = 0;
for (int i = 1; i < n; i++){
k = next[i - 1];
while (k>0 && s1[k]!=s1[i] ){
k = next[k-1];
}
if (s1[k] == s1[i]){
k++;
}
next[i] = k;
}
}
KMP算法
最新推荐文章于 2023-04-09 17:43:52 发布