字符串模式匹配的KMP算法实现
来源:互联网 发布:网络诈骗案证据不足 编辑:程序博客网 时间:2024/05/18 17:26
方法一:朴素模式匹配
思路:遍历主串,匹配失败则模式串右移1位,重新从头开始匹配
#include<iostream>#include<string>using namespace std;//字符串模式匹配(返回第一次匹配的下标)//朴素算法//s为主串 int index(string s, string ss){//长串为主串if(s.size() < ss.size()) {string tmp = s;s = ss;ss = tmp;} int i(0), j(0), flag(0);while(i <= s.size() - ss.size() && !flag) {j = 0;flag = 1;while(j < ss.size() && flag) {if(ss[j] == s[i + j])++ j;else flag = 0;}++ i;}return flag ? (i - 1) : -1;} int main(){string s(""), ss("");while(cin >> s >> ss) {cout << index(s, ss) << endl; }return 0;}方法二:KMP算法实现
KMP的思路和理解,借鉴几篇博客:
http://www.matrix67.com/blog/archives/115
http://kenby.iteye.com/blog/1025599
下面是我的代码:
#include<iostream>#define MAXN 11111using namespace std;//s为主串 void change(string *s, string *ss){if((*s).size() < (*ss).size()) {string tmp = *ss;*ss = *s;*s = tmp;}}void get_next(string ss, int next[]){int len = ss.size();int i = 0, j = -1;next[0] = -1;while(i < len) {if(j == -1 || ss[i] == ss[j]) {next[ ++ i ] = (++ j);}else {j = next[j];}}}int kmp(string s, string ss, int next[]){int s_len = s.size(), ss_len = ss.size();int i(0), j(0);while(i < s_len && j < ss_len) {if(j == -1 || s[i] == ss[j]) {++ i; ++ j;}else {j = next[j];}}if(j == ss_len) return (i - ss_len);return -1;}int main(){//s为主串 string s(""), ss("");int next[MAXN];while(cin >> s >> ss) {change(&s, &ss);get_next(ss, next);cout << kmp(s, ss, next) << endl; }return 0;}
0 0
- 字符串模式匹配的KMP算法实现
- KMP字符串模式匹配算法实现(php)
- KMP字符串模式匹配算法实现
- KMP字符串模式匹配算法Java实现
- KMP字符串模式匹配算法实现
- KMP字符串模式匹配算法实现
- KMP字符串模式匹配算法实现
- KMP算法实现字符串的模式匹配完整C代码
- java实现字符串的一般和KMP模式匹配算法
- 字符串的模式匹配算法--KMP算法
- 字符串的模式匹配算法 KMP
- 字符串模式匹配(所谓的kmp)算法
- 字符串的模式匹配:KMP算法
- 算法:字符串的KMP模式匹配
- 改良的KMP字符串模式匹配算法
- 字符串的模式匹配,KMP算法
- 字符串的模式匹配:KMP算法
- 字符串模式匹配的KMP算法
- window2008 r2 中文语言包
- RocketMQ源码解析:Message拉取&消费(下)
- 算法细节系列(15):Valid Parentheses系列
- RMAN 备份与恢复之所有文件都丢失
- centos 网络配置
- 字符串模式匹配的KMP算法实现
- android listview 长按弹出菜单--ContextMenu并进行删除操作
- 在Linux下设置spyder快捷键
- ResNeXt网络进化
- 美国孩子上学真像你以为的那么轻松吗?
- 2017-5-9 LINUX 笔记
- [编程之美-06]字符串回文判断
- MyEclipse14热部署
- 分布式架构学习之:013--基于Dubbo的分布式系统架构介绍(以第三方支付系统架构为例)