字符串匹配之KMP,C++实现
文字介绍KMP我就不讲了,相信大家看了不少别的文章也没看懂,我肯定也不能用文字表达清楚。
最好的办法就是看严老师的视频,讲的很清晰。
请百度 KMP 严蔚敏;
在这里我用C++实现一下;
#include <iostream>
#include <string>
#include<vector>
using namespace std;
class KMP
{
public:
KMP(string s_,string t_) //构造函数,主串和模式串的接口
{
s=s_;t=t_;
}
void get_nextval();//得到nextval的值
void visit_nextval(vector<int> );//nextval接口
int index_kmp(int);//索引匹配
protected:
string s,t;
vector<int> nextval;
};
void KMP::get_nextval()
{
int i=,j=;
nextval[]=;
while(i<(int)t.size()-)
{
if(j==||t[i]==t[j])
{
++i;
++j;
if(t[i]!=t[j])
nextval[i]=j;
else
nextval[i]=nextval[j];
}
else
j=nextval[j]; }
}
int KMP::index_kmp(int pos)
{
int i=pos;
int j=;
while(i<=(int)s.size()-&&j<=(int)t.size()-)
{
if(j==||s[i]==t[j])
{
++i;
++j;
}
else
j=nextval[j];
}
if(j>(int)t.size()-)
return i-((int)t.size()-);
else
return ;
}
void KMP::visit_nextval(vector<int> next )
{
nextval=next;
}
int main()
{
string temp,s,t;
s.push_back('*');
t.push_back('*'); //没有使用s[0]和t[0],随意使用一个字符进行填充(不要用字母)
cout<<"输入主串:";
getline(cin,temp); //用getline函数输入串
s+=temp;
cout<<"输入模式串:";
getline(cin,temp);
t+=temp;
KMP teststring(s,t);
vector<int> nextval;
nextval.assign(t.size()+,);
teststring.visit_nextval(nextval);
teststring.get_nextval();
cout<<teststring.index_kmp()<<endl;
}
字符串匹配之KMP,C++实现的更多相关文章
- Luogu 3375 【模板】KMP字符串匹配(KMP算法)
Luogu 3375 [模板]KMP字符串匹配(KMP算法) Description 如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置. 为了减少骗分的情况,接下来 ...
- 字符串匹配的 KMP算法
一般字符串匹配过程 KMP算法是字符串匹配算法的一种改进版,一般的字符串匹配算法是:从主串(目标字符串)和模式串(待匹配字符串)的第一个字符开始比较,如果相等则继续匹配下一个字符, 如果不相等则从主串 ...
- 字符串匹配的kmp算法 及 python实现
一:背景 给定一个主串(以 S 代替)和模式串(以 P 代替),要求找出 P 在 S 中出现的位置,此即串的模式匹配问题. Knuth-Morris-Pratt 算法(简称 KMP)是解决这一问题的常 ...
- HDU 2087 剪花布条(字符串匹配,KMP)
HDU 2087 剪花布条(字符串匹配,KMP) Description 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出 ...
- HDU 1686 Oulipo / POJ 3461 Oulipo / SCU 2652 Oulipo (字符串匹配,KMP)
HDU 1686 Oulipo / POJ 3461 Oulipo / SCU 2652 Oulipo (字符串匹配,KMP) Description The French author George ...
- HDU 1711 Number Sequence (字符串匹配,KMP算法)
HDU 1711 Number Sequence (字符串匹配,KMP算法) Description Given two sequences of numbers : a1, a2, ...... , ...
- 字符串匹配(KMP 算法 含代码)
主要是针对字符串的匹配算法进行解说 有关字符串的基本知识 传统的串匹配法 模式匹配的一种改进算法KMP算法 网上一比較易懂的解说 小样例 1计算next 2计算nextval 代码 有关字符串的基本知 ...
- 字符串匹配的KMP算法
~~~摘录 来源:阮一峰~~~ 字符串匹配是计算机的基本任务之一. 举例来说,有一个字符串”BBC ABCDAB ABCDABCDABDE”,我想知道,里面是否包含另一个字符串”ABCDABD”? 许 ...
- 字符串匹配的KMP算法详解及C#实现
字符串匹配是计算机的基本任务之一. 举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD" ...
- 字符串匹配与KMP算法实现
>>字符串匹配问题 字符串匹配问题即在匹配串中寻找模式串是否出现, 首先想到的是使用暴力破解,也就是Brute Force(BF或蛮力搜索) 算法,将匹配串和模式串左对齐,然后从左向右一个 ...
随机推荐
- 数据结构(C语言版)顺序表相关算法代码实现
这两天实现了一下顺序表的相关操作,包括顺序表初始化.创建.遍历.第i个元素前插入,删除第i个元素.查找元素e的位置.清空顺序表.销毁顺序表.合并两个非递减顺序表操作. 这次在网上学习到了新的布局方法, ...
- require.js(浅聊)
一.require 了解requirejs之前首先明白什么是模块化: 1.什么是模块化? 模块化设计是指在对一定范围内的不同功能或相同功能不同性能.不同规格的产品进行功能分析的基础上,划分并设计出一系 ...
- python编程快速上手之第3章实践项目参考答案
1 #!/usr/bin/env python 2 # coding:utf-8 3 # write by mfyang 4 # collatz.py 5 # 从用户读入一个值,并判断这个值是不是一个 ...
- CSS3-loading动画(一)
前两天从一个网站中看到了一些比较好的loading动画效果,是用纯CSS3来写的,感觉不错,就尝试着照着效果来自己写出来. 在开始之前,先复习一个小知识:CSS3新增的关键帧动画,可以用来实现很多的动 ...
- App Extensions篇之Sticker Pack Extension
转载请标明原文链接:http://www.cnblogs.com/zhanggui/p/7151795.html 前言 上一篇文章对App Extension做了简单介绍以及对Share Extens ...
- kali切换字符界面模式和切换图形界面模式
我也是走了很多弯路,下面把正确的命令写出来,网上的不是说不正确,是linux命令做出了更改 Systemd是一种新的linux系统服务管理器 它替代了init, 直接上命令吧! 切换至字符界面 sud ...
- PHP获取文件夹中的所有文件(包括子目录)
方法一: 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 function tree($directory) ...
- 二叉树 java实现
class Node { private int data; // 其他数据 private int otherData; private Node left; private Node right; ...
- LoadRunner接口工作总结
因为工作中需要开发维护类似枢纽性质的平台,所以经常利用LR进行接口测试.接口自动化测试.接口压力测试.用多了LR,有点不愿意使用报文编辑器进行手工接口测试了. 接口脚本操作过程: 首先:打开LR,N ...
- centos下-MariaDB的安装
安装命令: yum install mariadb mariadb-server 服务命令: systemctl start|stop|restart mariadb root用户密码设置 mysql ...