小学期实现kmp算法新方法
题目长这样:
上次我们找到办法是采用数据结构中常用的一种先找出模式串的next[j]然后在进行比对,如果理解的同学这种方法更加的贴合理论知识
但是我今天又想了一种方法不用求他的next[j]数据也可以做出来下面是我的思路
根据我的思路大家可以去探究一下,或许会比原来的用next[j]方法有些地方不太完美但确实可以实现下面是整道题的源代码
#include<stdio.h> #include<iostream> #include<string.h> using namespace std; int find(char s[] ,int len_s ,char t[],int len_t) { int i=0; int j=0; int x=0; while(i<len_s&&j<len_t) { if(s[i]==t[j]) { j++; i++; } else { j=0; x+=1; i=x; } } if(j==len_t) return i-j; else return -1; } int main () { int cas; char s[100],t[100]; scanf("%d" ,&cas); while(cas--) { scanf("%s %s",s,t); int len_s=strlen(s);//求出字符串的长度 int len_t=strlen(t); if(find(s,len_s,t,len_t)!=-1) { printf("%d\n",find(s,len_s,t,len_t)); } else{ printf("not find!\n");} } }
最后我还想说每道题目都有很多种解决办法,大家在学习做题过程中要多一些思考,多一些探究的想法这样会学到很多同时也能收获满满