博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基础数据结构-串-KMP算法
阅读量:6676 次
发布时间:2019-06-25

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

KMP算法用于模式串字符匹配,因为没有提前预习,上课时听得云里雾里,后来回去看了一晚上,翻了一些网上的讲解才理解了。我简单讲一下,我们在一串字符串A里搜索匹配另一段字符串B时,思路最简单方法的就是从第一位开始一个个对照匹配,出现错误就移动到第二个字符继续匹配,不匹配再第三个。但这样毕竟性能比较低,KMP引入了一个next数组,先将需要匹配的这段字符B计算出next值,在AB匹配的时候如果出现不匹配的情况,就根据next值跳到对应的字符继续匹配,所以中间就省略了一些不必要的匹配,从而提高了性能。next值的计算网上有很几种不同的方法,初始下标从-1~1都有。我学习的主要是严蔚敏老师的书,从0开始,第二位是1,书里是根据最经典的next值计算公式计算的。贴下代码让大家参考一下,具体的next值计算回学校拿到书后更新。

 

第一个输入t,表示有t个实例

第二行输入第1个实例的主串,第三行输入第1个实例的模式串
以此类推
第一行输出第1个实例的模式串的next值
第二行输出第1个实例的匹配位置,位置从1开始计算,如果匹配成功输出位置,匹配失败输出0
以此类推

 

#include 
#include
using namespace std;class myString{ private: string mainstr; int size; void GetNext(string p,int next[]); int KMPFind(string p,int pos,int next[]); public: myString(); ~myString(); void SetVal(string sp); int KMPFindSubsstr(string p,int pos);};myString::myString(){ size = 0; mainstr = "";}myString::~myString(){ size = 0; mainstr = "";}void myString::SetVal(string sp){ mainstr = ""; mainstr.assign(sp); size = mainstr.length();}int myString::KMPFindSubsstr(string p,int pos){ int i; int L = p.length(); int *next = new int[L+1]; next[0] = 0; GetNext(p,next); for(i=1;i<=L;i++) { cout <
<<' '; } cout<
p.length()) { return i-p.length(); } else { return 0; }}int main(){ int num; cin>> num; for(int i=0;i
>main; myString NewString; NewString.SetVal(main); cin >>pattern; cout <
<

 

转载于:https://www.cnblogs.com/nathaneko/p/6491621.html

你可能感兴趣的文章
day1-接口测试_jmeter_postman
查看>>
Python 文件操作
查看>>
java 中的流程控制
查看>>
Ubuntu 安装 Docker
查看>>
Vue.js 插件开发详解
查看>>
python练习2
查看>>
nodejs中的 Cannot read property'text' of undefined 问题
查看>>
python 函数的定义
查看>>
袁帅:用科技技术助力效益转化 剖析当前会议互动中的移动互联网科技
查看>>
关于机器级二进制位移
查看>>
windows7 10 windows2008 windws2012 nfs客户端的安装
查看>>
Spring Cloud--Honghu Cloud分布式微服务云系统—System系统管理
查看>>
MySQL数据库源码包安装(5.7最新版本)
查看>>
CentOS 7 yum安装zabbix 设置中文界面
查看>>
Django1.11启动错误:Generator expression must be parent
查看>>
SSH协议服务器、SUDO用法以及PAM机制
查看>>
CSS如何让li 4个一行显示
查看>>
杭州雄迈信息技术有限公司被评为“杭州市专利试点企业”
查看>>
ManageEngine网络管理软件新特点
查看>>
美团即时物流的分布式系统架构设计
查看>>