小学期实现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");} } }
最后我还想说每道题目都有很多种解决办法,大家在学习做题过程中要多一些思考,多一些探究的想法这样会学到很多同时也能收获满满
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律