博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++实现KMP模式匹配算法
阅读量:6116 次
发布时间:2019-06-21

本文共 1347 字,大约阅读时间需要 4 分钟。

#include
#include
#include
using namespace std; void Next(const string & pat,vector
& 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
next; Next(str2, next); vector
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

你可能感兴趣的文章
实验二 Java面向对象程序设计
查看>>
------__________________________9余数定理-__________ 1163______________
查看>>
webapp返回上一页 处理
查看>>
新安装的WAMP中phpmyadmin的密码问题
查看>>
20172303 2017-2018-2 《程序设计与数据结构》第5周学习总结
查看>>
eclipse中将一个项目作为library导入另一个项目中
查看>>
Go语言学习(五)----- 数组
查看>>
Android源码学习之观察者模式应用
查看>>
Content Provider的权限
查看>>
416. Partition Equal Subset Sum
查看>>
centos7.0 64位系统安装 nginx
查看>>
数据库运维平台~自动化上线审核需求
查看>>
注解开发
查看>>
如何用 Robotframework 来编写优秀的测试用例
查看>>
Django之FBV与CBV
查看>>
Vue之项目搭建
查看>>
app内部H5测试点总结
查看>>
Docker - 创建支持SSH服务的容器镜像
查看>>
[TC13761]Mutalisk
查看>>
三级菜单
查看>>