码迷,mamicode.com
首页 > 其他好文 > 详细

kmp--考研写法

时间:2019-06-29 10:37:52      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:--   length   eof   malloc   int   clu   while   info   数组   

首先是模式串匹配:

#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--考研写法

标签:--   length   eof   malloc   int   clu   while   info   数组   

原文地址:https://www.cnblogs.com/2014slx/p/11105833.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!