|
发表于 2021-11-15 23:05:36
|
显示全部楼层
这已经是我的极限了,希望不会错:- #include <stdio.h>
- int kmp(char S[], char W[], int s, int w){
- int P[s], nP = 0, j = 0, k = 0, T[s];
- for(int i = 0; i < s; i++){
- T[i] = -1;
- P[i] = -1;
- }
- while(j < s){
- if(W[k] == S[j]){
- j++;
- k++;
- if(k == w){
- P[nP] = j-k;
- nP++;
- k = T[k];
- }
- }
- else{
- k = T[k];
- if(k < 0){
- j++;
- k++;
- }
- }
- }
- for(int i = 0;; i++){
- if(P[i] > 0){
- return P[i];
- }
- }
- }
- int main()
- {
- char A[1000000], B[1000000];
- scanf("%s", A);
- scanf("%s", B);
- int a, b;
- for(a = 0; A[a]; a++){}
- for(b = 0; B[b]; b++){}
- int answer = a > b ? kmp(A, B, a, b) : -1;
- printf("%d", answer);
- }
复制代码 |
|