首页 技术 正文
技术 2022年11月15日
0 收藏 559 点赞 2,511 浏览 1205 个字

这块硬骨头,放在这里半年的时间了,一直没有动,今天周末看看,书上把过程写的比较详细,自己基本也看懂了,但是对代码本身的编写还是比较生疏,要经常复习,估计才能看透,后面有看了kmp;这两者之间的关系也是头大。。。

 /*!
* \file MP_算法.cpp
*
* \author ranjiewen
* \date 2017/02/12 15:06
*
*
*/ void preMp(const char *pattern, int m, int mpNext[]) //m为pattern的长度
{
int i, j;
i = ;
j = mpNext[] = -;
while (i<m)
{
while (j>-&&pattern[i]!=pattern[j]) //
{
j = mpNext[j];
}
mpNext[++i] = ++j; //mpNext(j)=f(j-1)+1
}
} #include <iostream>
#include <string>
using namespace std; void MP(string pattern, string target)
{
int m = pattern.length();
int n = target.length();
if (m>n)
{
cerr << "Unsuccessful match!" << endl;
return;
}
const char* x = pattern.c_str();
const char* y = target.c_str();
int i = , j = , mpNext[]; //m+1大小 preMp(x, m, mpNext); //mpNext 进行一下轮比较过程中模式P的起始比较位置 bool flag = false;
while (i<n) //i 遍历target字符串
{
while (j>-&&x[j]!=y[i]) //j 匹配模式字符串
{
j = mpNext[j];
}
j++;
i++; if (j>=m)
{
cout << "Matching index found at:" << i - j << endl;
j = mpNext[j]; //匹配后面的子串
flag = true;
}
}
if (!flag)
{
cout << "Unsuccessful match=-====!";
}
} int main(int argc, char** argv)
{
string p1 = "abcabcad";
string p2 = "adcadcad";
string p3 = "ababcaabc";
string t = "ctcabcabcadtcaabcabcaaatabcabcad"; cout << "MP_p1 : " << endl;
MP(p1, t);
cout << endl; cout << "MP_p2 : " << endl;
MP(p2, t);
cout << endl; cout << "MP_p3 : " << endl;
MP(p3, t);
cout << endl; string t1 = "ctcaatcacaatcat";
string p4 = "caatcat";
MP(p4, t1);
cout << endl;
return ;
}
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,964
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,486
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,331
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,114
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,747
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,781