include<iostream>
using namespace std;
int *buildNext(char *P) {
size_t m = strlen(P), j = 0;
int *N = new int[m];
int t = N[0] = -1;
while (j < m - 1) {
if (0 > t || P[j] == P[t]) {
j++; t++;
N[j] = (P[j] != P[t] ? t : N[t]);
}
else
t = N[t];
}
return N;
}
int match(char *P, char *T) {
int *next = buildNext(P);
int n = (int)strlen(T), i = 0;
int m = (int)strlen(P), j = 0;
while (j < m&&i < n)
if (0 > j || T[i] == P[j])
{ i++; j++; }
else
j = next[j];
delete[] next;
return i - j;
}
int main() {
char ca[30], cb[80];
cout << "Please input T and P: " << endl;
cin >> ca >> cb;
int place = match(ca, cb);
cout << "place is :" << place << endl;
return 0;
}
KMP
最新推荐文章于 2024-11-16 09:45:51 发布