KMP
来源:互联网 发布:跪求十宗罪网络剧种子 编辑:程序博客网 时间:2024/04/29 05:17
#include <iostream>using namespace std;void set_next(int* next, char *s){ int k, j; int len = strlen(s); next[0] = -1; for(k=1; k<len; k++) { j = k-1; while(1) { if(next[j] == -1) { if(s[k] == s[j]) next[k] = -1; else next[k] = 0; break; } if(s[j] == s[next[j]]) { next[k] = next[j] + 1; break; } j = next[j]; } }}int str_find(char *s1, char *s2){ if(s1==NULL || s2==NULL) return -1; int len1 = strlen(s1); int len2 = strlen(s2); int i,j; int *next = new int[len2]; set_next(next, s2); i=j=0; while(i<len1 && j<len2) { if(j==-1 || s1[i]==s2[j]) { i++;j++; } else j = next[j]; } if(j==len2) return i-len2; else return -1;}int main(){ int pos; char s1[100]; char s2[100]; while(1) { cin>>s1>>s2; pos = str_find(s1, s2); cout<<pos<<endl; } return 0;}