222wan

导航

小学期实现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");}
        
        
    }
}

 最后我还想说每道题目都有很多种解决办法,大家在学习做题过程中要多一些思考,多一些探究的想法这样会学到很多同时也能收获满满

posted on 2023-06-20 03:27  角落的蘑菇  阅读(2)  评论(0编辑  收藏  举报