#include<iostream>
#include<string>
#include<vector> using namespace std; void Next(const string & pat,vector<int> & next)
{
next.resize(pat.length());
if(pat.length() == 0)
return;
next[0] = -1; for(size_t pos = 1; pos < pat.length(); ++pos)
{
size_t sublen = pos-1;
while(sublen >= 0)
{
if(pat.substr(0, sublen) == pat.substr(pos-sublen+1, sublen))
break;
--sublen;
}
next[pos] = sublen;
}
return;
} int main(void)
{
string str1, str2;
while(cin >> str1 >> str2) {
vector<int> next;
Next(str2, next); vector<int> pos; int i = 0, j1 = 0, j2 = 0;
while(j1 < str1.length())
{
j2 = j1 - i;
if(j2 >= str2.length()) {
// found
pos.push_back(i);
// move on;
int delta = str2.length();
i = i + delta;
j1 = max(i,j1);
}
else if(str1[j1] == str2[j2]) {
++j1;
}
else { // str1[j1] != str2[j2];
int delta = j2 - next[j2];
i = i + delta;
j1 = max(i,j1);
}
} //output.
cout << "str1.length(): " << str1.length() << endl;
cout << "str2.length(): " << str2.length() << endl;
cout << "str1 from pos: " << endl;
for(int i = 0; i < pos.size(); ++i)
cout << "[" << (i+1) << "]: " << str1.substr(pos[i], string::npos) << endl;
cout << "str2: " << str2 << endl;
}
return 0;
}

參考自: http://www.cnblogs.com/BeyondAnyTime/archive/2012/07/09/2583133.html

C++实现KMP模式匹配算法的更多相关文章

  1. KMP模式匹配算法

    KMP模式匹配算法 相信很多人对于这个还有点不了解,或者说是不懂,下面,通过一道题,来解决软考中的这个问题! 正题: aaabaaa,其next函数值为多少? 对于这个问题,我们应该怎么做呢? 1.整 ...

  2. 线性表-串:KMP模式匹配算法

    一.简单模式匹配算法(略,逐字符比较即可) 二.KMP模式匹配算法 next数组:j为字符序号,从1开始. (1)当j=1时,next=0: (2)当存在前缀=后缀情况,next=相同字符数+1: ( ...

  3. C++编程练习(7)----“KMP模式匹配算法“字符串匹配

    子串在主串中的定位操作通常称做串的模式匹配. KMP模式匹配算法实现: /* Index_KMP.h头文件 */ #include<string> #include<sstream& ...

  4. 详细解读KMP模式匹配算法

    转载请注明出处:http://blog.csdn.net/fightlei/article/details/52712461 首先我们需要了解什么是模式匹配? 子串定位运算又称为模式匹配(Patter ...

  5. [从今天开始修炼数据结构]串、KMP模式匹配算法

    [从今天开始修炼数据结构]基本概念 [从今天开始修炼数据结构]线性表及其实现以及实现有Itertor的ArrayList和LinkedList [从今天开始修炼数据结构]栈.斐波那契数列.逆波兰四则运 ...

  6. 字符串的模式匹配算法——KMP模式匹配算法

    朴素的模式匹配算法(C++) 朴素的模式匹配算法,暴力,容易理解 #include<iostream> using namespace std; int main() { string m ...

  7. 串、KMP模式匹配算法

    串是由0个或者多个字符组成的有限序列,又名叫字符串. 串的比较: 串的比较是通过组成串的字符之间的编码来进行的,而字符的编码指的是字符在对应字符集中的序号. 计算机中常用的ASCII编码,由8位二进制 ...

  8. 数据结构(三)串---KMP模式匹配算法

    (一)定义 由于BF模式匹配算法的低效(有太多不必要的回溯和匹配),于是某三个前辈发表了一个模式匹配算法,可以大大避免重复遍历的情况,称之为克努特-莫里斯-普拉特算法,简称KMP算法 (二)KMP算法 ...

  9. 浅谈KMP模式匹配算法

    普通的模式匹配算法(BF算法) 子串的定位操作通常称为模式匹配算法 假设有一个需求,需要我们从串"a b a b c a b c a c b a b"中,寻找内容为"a ...

  10. 初探—KMP模式匹配算法

    KMP算法思想: 普通的字符串匹配算法S主串必须要回溯.但回溯就影响了效率. 改进的地方也就是这里,我们从P 串本身出发,事先就找准了T自身前后部分匹配的位置,那就可以改进算法. next数组的含义: ...

随机推荐

  1. js实现返回上一页功能

    大家在做 "返回上一页" 这个功能的时候 都是用history.go(-1);来实现的 但这段代码只是简单的使用浏览器的后退功能 从浏览器缓存中取出页面来显示 但我们绝大部分情况都 ...

  2. RTP/RTCP协议详解

    1.简介 目前,在IP网络中实现实时语音.视频通信和应用已经成为网络应用的一个主流技术和发展方向,本文详细介绍IP协议族中用于实时语音.视频数据传输的标准协议RTP( Real-time Transp ...

  3. vue 错误处理

    https://sentry.io/for/vue/ https://cn.vuejs.org/v2/guide/deployment.html#跟踪运行时错误

  4. Counting Kangaroos is Fun 求最少可见袋鼠数

    Description There are n kangaroos with pockets. Each kangaroo has a size (integer number). A kangaro ...

  5. 又见GCD (已知最大公约数和其中一个数求另一个数)

    #include<cstdio> int f1(int a,int b) //最大公约数 { ) return b; else return f1(b,a%b); } int f2(int ...

  6. CEF与代理

    此文已由作者王荣涛授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. CEF(Chromium Embedded Framework)如今已经广泛被应用于客户端软件,网易内部就有 ...

  7. 解决Can’t finish GitHub sharing process Successfully created project ‘GitHubDemo’ on GitHub

    Can't finish GitHub sharing process        Successfully created project 'KeyWordsFrameWork' on GitHu ...

  8. 大数据学习——hadoop的RPC框架

    项目结构 服务端代码 test-hadoop-rpc pom.xml <?xml version="1.0" encoding="UTF-8"?> ...

  9. window查看哪些端口被占用命令

    管理员方式运行cmd netstat -n

  10. HDU-1041-Computer Transformation,大数递推,水过~~

                                                                                  Computer Transformatio ...