kmp--考研写法

Posted 2014slx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了kmp--考研写法相关的知识,希望对你有一定的参考价值。

首先是模式串匹配:

#include<iostream>
#include<stdlib.h>
using namespace std;
#define maxn 1000000
struct str

    char *ch;
    int length;
a,b;
int lower(str a, str b)

   
    int i=1,j=1;
    int k=0;
    
    while(i<=a.length&&j<=b.length)
    
        if(a.ch[i]==b.ch[j])
        
            i++;
            j++;
        
        else
        
            i=++k;
            j=1;
        
    
    if(j>b.length)
        return k;
    else
        return 0;
    
    

int main()


    cin>>a.length;
    a.ch=(char*)malloc((a.length+1)*sizeof(char));
    for(int i=1;i<=a.length;i++)
        cin>>a.ch[i];
    cin>>b.length;
    b.ch=(char*)malloc((b.length+1)*sizeof(char));
    for(int i=1;i<=5;i++)
        cin>>b.ch[i];
    if(lower(a,b)!=0)
    cout<< lower(a, b)<<endl;
    else
        cout<<"no match"<<endl;
    free(a.ch);
    free(b.ch);
        
    return 0;

malloc : 

数组=(类型*)malloc(数组大小*sizeof(类型));

free(数组);

例如:

 a.ch=(char*)malloc((a.length+1)*sizeof(char));
 free(b.ch);

为什么不用2个for。然后不匹配break呢?
因为更好改kmp,而且更防止老师眼睛一累以为你瞎搞,批错了了。

 

然后 这个算法的复杂度是o(m^n);

我们需要一个更快的算法——kmp

 我们来看一个例子:例子别的博主那里偷一下吧。没时间自己画图。哈哈哈

 

 

 
 

技术图片

 

以上是关于kmp--考研写法的主要内容,如果未能解决你的问题,请参考以下文章

考研数据结构与算法字符串

-考研第十一周总结-

编程训练-考研上机模拟综合模拟2-2019浙大上机模拟(晴神)

由一道考研基础题引发的关于对(函数导数符号在内外的区别)f‘(x)和[f(x)]‘的区别思考

从2019考研数据分析,这些院校是考研"重灾区"!20考研人须知

西南大学数学考研经验分享?