关注
#include<stdio.h> #include<stdlib.h> #include<string.h> int *GetNext(char *match) { int i; i = 1; int *pNext = NULL; pNext = (int*)malloc(sizeof(int)*strlen(match)); pNext[0] = 0; int j; j = i-1; while(i < strlen(match)) { if(match[i] == match[pNext[j]]) { pNext[i] = pNext[j]+1; i++; j = i-1; } else if(pNext[j] == 0) { pNext[i] = 0; i++; j = i-1; } else { j = pNext[j]-1; } } return pNext; } int KMP(char *src,char *match) { if(src == NULL || match == NULL)return -1; int *pNext = NULL; //获得Next数组 pNext = GetNext(match); //查找 int i; int j; i = 0; j = 0; while(i < strlen(src)&& j<strlen(match)) { if(src[i] == match[j]) { i++; j++; } else { //不想等 且匹配串已经回到开始位置仍不相等 主串向后移动 if(j == 0) { i++; } //匹配串向前移动 else { j = pNext[j-1]; } } } //匹配串已经走完 结束 if(j == strlen(match)) { return i-j; } return -1; } int main() { char *src = "ahfhawoerqhewqlknxcabcabcdabcabcfjfesaruwqou"; char *match = "abcahseifysfryewbcdabcabcf"; int n; n = KMP(src,match); printf("%d\n",n); return 0; }
查看原帖
点赞 评论
相关推荐
牛客热帖
更多
正在热议
更多
# 如果春招能重来,我会___ #
25973次浏览 266人参与
# 有深度的简历长什么样? #
59960次浏览 765人参与
# 在爱玛,骑向未来 #
17598次浏览 359人参与
# 这个offer值得去吗? #
26013次浏览 200人参与
# 刚入职就____,这样正常吗? #
146374次浏览 702人参与
# 你会因为行情,降低找工作标准吗? #
40006次浏览 303人参与
# 联宝杯大学生创新大赛,你的技术值得产业级答案 #
48835次浏览 601人参与
# 美团笔试 #
988896次浏览 5810人参与
# 实习生的生存小技巧 #
36769次浏览 339人参与
# 找工作,你都让AI帮你做什么? #
34018次浏览 292人参与
# 秋招想进国企该如何准备 #
147044次浏览 689人参与
# 实习生活中那些难忘的瞬间 #
345030次浏览 3448人参与
# 你见过最离谱的招聘要求是什么? #
281424次浏览 1887人参与
# 记录我的毕业季 #
1901次浏览 58人参与
# 字节开奖 #
155849次浏览 748人参与
# 租房找室友 #
68472次浏览 251人参与
# 阿里求职进展汇总 #
532501次浏览 4308人参与
# 实习怎么做才有更好的产出 #
50558次浏览 464人参与
# 春招前还要继续实习吗? #
66475次浏览 326人参与
# 你被哪些公司挂了? #
193901次浏览 1049人参与
# 机械制造薪资爆料 #
2088402次浏览 11165人参与
# 面试常问题系列 #
307342次浏览 4797人参与
