字符串的模式匹配算法——KMP模式匹配算法
朴素的模式匹配算法(C++)
朴素的模式匹配算法,暴力,容易理解
#include<iostream>
using namespace std;
int main()
{
string mainStr, str;
cin >> mainStr >> str;
int i, j, pos = -1, count = 0;
for(i = 0; i < mainStr.length(); i++)
{
for(j = 0; j < str.length(); j++, i++)
{
if(mainStr[i] != str[j])
{
break;
}
if(j == str.length() - 1)
{
if(count == 0)
{
pos = i - j; //记录第一个与str相等的字符串在主串mainStr中的第一个字母的下标
}
count++; //记录与str相等的字符串的数量
}
}
i = i - j; //对i值(主串指针)进行回溯操作
}
cout << "pos=" << pos << ",count=" << count << endl;
return 0;
}
KMP模式匹配算法(C++)
KMP模式匹配算法相比较朴素的模式匹配算法,减少了主串指针回溯的操作
#include<iostream>
using namespace std;
int main()
{
string mainStr, str;
cin >> mainStr >> str;
int i, j, pos = -1, count = 0;
int next[256];
//计算next数组的数值
i = 0;
j = -1;
next[0] = -1;
while(i < str.length())
{
if(j == -1 || str[i] == str[j])
{
i++;
j++;
next[i] = j;
}
else
{
j = next[j];
}
}
//查找子串的位置和数量
i = 0;
j = 0;
while(i < mainStr.length())
{
if(mainStr[i] != str[j])
{
j = next[j];
}
else
{
if(j == str.length() - 1)
{
if(count == 0)
{
pos = i - j; //记录子串第一次的第一个字母出现在主串中的位置
}
count++; //记录在主串中含有子串的数量
}
}
i++;
j++;
}
cout << "pos=" << pos << ",count=" << count << endl;
return 0;
}
KMP模式匹配算法改进(C++)
改进操作在于计算next数组数值的时候考虑了特殊情况 —— 子串形如abcabcabx
#include<iostream>
using namespace std;
int main()
{
string mainStr, str;
cin >> mainStr >> str;
int i, j, pos = -1, count = 0;
int next[256];
//计算next数组的数值
i = 0;
j = -1;
next[0] = -1;
while(i < str.length())
{
if(j == -1 || str[i] == str[j])
{
i++;
j++;
if(str[j] == str[i])
{
next[i] = next[j];
}
else
{
next[i] = j;
}
}
else
{
j = next[j];
}
}
//查找子串的位置和数量
i = 0;
j = 0;
while(i < mainStr.length())
{
if(mainStr[i] != str[j])
{
j = next[j];
}
else
{
if(j == str.length() - 1)
{
if(count == 0)
{
pos = i - j; //记录子串第一次的第一个字母出现在主串中的位置
}
count++; //记录在主串中含有子串的数量
}
}
i++;
j++;
}
cout << "pos=" << pos << ",count=" << count << endl;
return 0;
}
字符串的模式匹配算法——KMP模式匹配算法的更多相关文章
- C++编程练习(7)----“KMP模式匹配算法“字符串匹配
子串在主串中的定位操作通常称做串的模式匹配. KMP模式匹配算法实现: /* Index_KMP.h头文件 */ #include<string> #include<sstream& ...
- 数据结构——串的朴素模式和KMP匹配算法
一.朴素模式 假设我们要从主串S="goodgoogle"中找到子串T="google"的位置,步骤如下: i表示主串的当前位置下标,j表示子串的当前位置下标, ...
- [从今天开始修炼数据结构]串、KMP模式匹配算法
[从今天开始修炼数据结构]基本概念 [从今天开始修炼数据结构]线性表及其实现以及实现有Itertor的ArrayList和LinkedList [从今天开始修炼数据结构]栈.斐波那契数列.逆波兰四则运 ...
- 串、KMP模式匹配算法
串是由0个或者多个字符组成的有限序列,又名叫字符串. 串的比较: 串的比较是通过组成串的字符之间的编码来进行的,而字符的编码指的是字符在对应字符集中的序号. 计算机中常用的ASCII编码,由8位二进制 ...
- 《数据结构》之串的模式匹配算法——KMP算法
//串的模式匹配算法 //KMP算法,时间复杂度为O(n+m) #include <iostream> #include <string> #include <cstri ...
- KMP模式匹配算法
KMP模式匹配算法 相信很多人对于这个还有点不了解,或者说是不懂,下面,通过一道题,来解决软考中的这个问题! 正题: aaabaaa,其next函数值为多少? 对于这个问题,我们应该怎么做呢? 1.整 ...
- 线性表-串:KMP模式匹配算法
一.简单模式匹配算法(略,逐字符比较即可) 二.KMP模式匹配算法 next数组:j为字符序号,从1开始. (1)当j=1时,next=0: (2)当存在前缀=后缀情况,next=相同字符数+1: ( ...
- 详细解读KMP模式匹配算法
转载请注明出处:http://blog.csdn.net/fightlei/article/details/52712461 首先我们需要了解什么是模式匹配? 子串定位运算又称为模式匹配(Patter ...
- 字符串的朴素模式和KMP模式匹配
先复习一下字符串指针: #include <iostream> #include <string.h> using namespace std; int main() { ch ...
随机推荐
- 72 个网络应用安全实操要点,全方位保护 Web 应用的安全
原文地址:Web Application Security Checklist 原文作者:Teo Selenius(已授权) 译者 & 校正:HelloGitHub-小熊熊 & 卤蛋 ...
- ES6中的数组常用方法
数组在JS中虽然没有函数地位那么高,但是也有着举足轻重的地位,下面我就结合这ES5中的一些常用的方法,与ES6中的一些方法做一些说明和实际用途.大家也可以关注我的微信公众号,蜗牛全栈. 一.ES5中数 ...
- mybatis设置自动提交事务
我们想要mybatis帮助我们自动提交事务其实很简单,只需要在SqlSessionFactory对象的openSession方法中设置参数为true就可以了,mybatis工具类如下: public ...
- 安全Web服务器
https协议: 443 端口 虚拟Server0: 1.部署 网站证书(营业执照)# cd /etc/pki/tls/certs/ # wget http://classroom.example.c ...
- 性能监控之常见 Java Heap Dump 方法
一.前言 在本文中,我们总结下抓 Java dump 的几种不同方法. Java Heap Dump 是特定时刻 JVM 内存中所有对象的快照.它们对于解决内存泄漏问题和分析 Java 应用程序中的内 ...
- Java @FunctionalInterface注解-6
在学习 Lambda 表达式时,我们提到如果接口中只有一个抽象方法(可以包含多个默认方法或多个 static 方法),那么该接口就是函数式接口.@FunctionalInterface 就是用来指定某 ...
- 再有人问你HashMap,把这篇文章甩给他
搞定HashMap 作为一个Java从业者,面试的时候肯定会被问到过HashMap,因为对于HashMap来说,可以说是Java==集合中的精髓==了,如果你觉得自己对它掌握的还不够好,我想今天这篇文 ...
- gRPC趁现在还没大火,抢先了解一下
前言 系统分布式已经成为程序员的家常,将大型单体划分为相对简单的小模块,分散系统能力,提升系统扩展性.功能模块复用性等:各功能模块之间肯定会有很多数据共享和交互的应用场景,那就避免不了各模块之间的通信 ...
- python读取txt文件绘制散点图
方法和画折线图类似,差别在于画图函数不一样,用的是scatter() import matplotlib.pyplot as plt #以外部两个txt表分别作为x,y画图n=0m=0with ope ...
- 一台服务器能支撑多少个TCP连接
1. 困惑很多人的并发问题 在网络开发中,我发现有很多同学对一个基础问题始终是没有彻底搞明白.那就是一台服务器最大究竟能支持多少个网络连接?我想我有必要单独发一篇文章来好好说一下这个问题. 很多同学看 ...