const int maxLen = 10000;
int preMatch[maxLen]={0};
int kmp_match(char source[],char checked[]) {
int i = 0, j = 0;
memset(preMatch, 0, sizeof(preMatch));
if(!checked[i])
return 0;
++ i;
while(checked[i]) {
for(j = preMatch[i - 1]; checked[i] != checked[j] && j; j = preMatch[j - 1]);
preMatch[i] = (checked[i] == checked[j])? j + 1 : 0 ;
++ i;
}
int num = 0;
for(i = j = 0; source[i]; ++ i) {
if(checked[j] == source[i])
++ j;
else if(j)
-- i, j = preMatch[j - 1];
if(!checked[j])
++ num, j = 0;
}
return num;
for(i = j = 0; checked[j] && source[i]; ++ i) {
if(checked[j] == source[i])
++ j;
else if(j)
-- i, j = preMatch[j - 1];
}
if(!checked[j])
return i - j + 1;
else
return 0;
return 0;
}