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)]‘的区别思考