KMP算法
来源:互联网 发布:即时对战游戏源码 编辑:程序博客网 时间:2024/06/05 14:15
BF算法:O(n*m)
代码:
int index(string S,string T)//返回主串S中与模式串T匹配的字符序列第一个字符的序号;{ int i=1,j=1; while(i<=S.length()&&j<=T.length()) { if(S[i]==T[j]) i++,j++; else i=i-j+1,j=0; } if(j>T.length()) return i-T.length(); else return 0;}
KMP算法:O(n+m)
核心思想:利用已经得到的部分匹配信息来进行后面的匹配过程;在整个匹配过程中,i指针没有回溯;
做法:
第一步构造next[j]函数,next[j]的值:表示当模式中第j个字符与主串中相应字符“失配”时,在模式中需要和主串中该字符进行比较的字符的位置;
例:
j01234567模式串abaabcacnext[j]-10011201
代码:(即求上例j的next[j]函数)
void getnext(string T,int next[]){ int i=0,next[0]=-1,j=-1; while(i<T.length()) { if(j==-1||T[i]==T[j]) { i++;j++ next[i]=j; } else j=next[j]; }}
第二步进行匹配即可;
代码:
int index_kmp(string S,string T){ int i=0,j=0; while(i<S.length()&&j<T.length()) { if(j==-1||S[i]==T[j]) i++,j++; else j=next[j]; } if(j==T.length()) return i-T.length(); else return 0;}
阅读全文
1 0
- KMP算法详解 【KMP】
- 【KMP】KMP算法模板
- KMP hihoCoder1015 KMP算法
- kmp算法
- KMP算法
- KMP算法
- KMP算法
- KMP算法
- KMP 算法
- kmp算法
- KMP算法
- kmp算法
- KMP算法
- KMP算法
- kmp算法
- kmp算法
- KMP算法
- KMP算法
- ECharts使用从0到1 -- 以vue-echarts为例
- maven project 路径配置
- M
- 生产者消费者算法之多线程操作数据库速度提升
- linux解决xhost: unable to open display ""
- KMP算法
- xmlpullparser解析json文件
- jsp 1
- mysql语句(二)
- IPC主题三:共享内存
- 图片框
- 设置viewpager(可以/不可以)滑动
- tcpdump抓包分析详解
- Gradle基础