裸KMP 最简单无优化版本
来源:互联网 发布:代销下单与传淘宝 编辑:程序博客网 时间:2024/06/16 18:36
要弄明白 第j个字符前字符串的后缀 和 模式串的前缀 在j取不同值时 模式串前缀的最大长度
失配之后原问题要转化为前k个字符前字符串 找公共前缀后缀
这个博客写的蛮好的
http://blog.csdn.net/yutianzuijin/article/details/11954939/
#include <iostream>#include <string>using namespace std;string t,p;int next[30];void buildnext(string &p){ int j,t; t = next[0] = 0; //next[0]是没用的 对第一个字符进行匹配判断时 // 程序能判断并以不同方式操作 j = 1;//进行比较的得是第j个字符前的真后缀 即不包括第一个字符 while(j < p.size()){ if(t == 0){ //进行匹配判断的前缀是模式的首字符时 最后一个进行判断的前缀 if(p[j] != p[t]) //前缀的第一个字符匹配失败 //第j个字符之前的字符串没能与模式的所有前缀 有公共部分 j++ ; //于是拓展后缀 与模式前缀进行匹配试探 else{ //前缀的第一个字符匹配成功 向后步进 j++; t++; next[j] = t; } continue; } if(p[j] == p[t]){ j++ ; //匹配成功 向后步进 拓展后缀前缀 //准备对下一字符进行匹配 t++ ; next[j] = t; //同时可以确定模式第j+1个字符之前字符串的后缀与模式的前缀公共最长部分长度为t //即如果 第j+1个字符失配 那么t即为该字符前字符串后缀与模式前缀的最长公共长度 并记录下来 } else t = next[t];// 转化为对模式第t个字符之前的字符串取后缀判断公共部分 }//while }int kmp(string &w ,string &p){ int j ,t; j = t = 0; while( j <= w.size() - 1 ) { // j == w.size()文本串对比完全 if( t == 0){ if(p[t] != w[j]) j++; else{ if(t == p.size() - 1) return j - t; //匹配完成 直接跳出 t++; j++; } }//if if( p[t] == w[j]){ if(t == p.size() - 1) return j - t; //匹配完成 直接跳出 t++ ; j++ ; } else t = next [t] ; }//while return -1;}int main(){ while(cin >> p >> t){ buildnext(p); for (int i = 0 ;i < p.size();i++) cout <<"next[" << i <<"] : " << next[i] << endl; cout << kmp(t,p) << endl; } return 0;}
0 0
- 裸KMP 最简单无优化版本
- Dijkstra 之最短路径算法(无优化版本) By ACReaper
- 最简单易读的KMP算法代码
- KMP最简单的理解方式
- 一个简单的echo服务模型(最原始版本,代码没有优化)
- 最优化原理与无后效性
- strStr算法(无KMP) 略微优化的暴力解法
- 最简单的优化建议:
- 最简单的数据库优化
- 无锁编程:最简单例子
- 最简单的ssh无密登陆
- ssh无密码互通方法,最简单且无问题
- MyEclipse优化设置(最详细版本)
- MyEclipse优化设置(最详细版本)
- MyEclipse优化设置(最详细版本)
- KMP算法(未优化版本,算法导论原版)
- KMP优化
- 各版本最短路算法简单温习
- Android学习笔记(六*账号注册)
- chromedriver对应版本下载
- 在struts2中获取请求参数
- 固定背景图片不滚动
- CSS3快速上手之11:图文卡片
- 裸KMP 最简单无优化版本
- WPF中ListView在不滚动数据的情况下只能取到当前显示的数据,取不到滚动条以下的数据解决方法
- Xcode只能打开文件,无法打开工程
- 感人韩国电影推荐
- c#做端口转发程序支持正向连接和反向链接
- [8] Undefined index: UserId 错误 解决方案 thinkphp3.2
- VB MSHFlexGrid控件:CellAlignment 属性
- 《初入linux》--第二部分-系统结构与基本文件管理
- selenium之定位页面元素