KMP next表模板

 1 void makeNext(const char P[],int next[])
 2 {
 3     int q,k;//q:模版字符串下标;k:最大前后缀长度
 4     int m = strlen(P);//模版字符串长度
 5     next[0] = 0;//模版字符串的第一个字符的最大前后缀长度为0
 6     for (q = 1,k = 0; q < m; ++q)//for循环,从第二个字符开始,依次计算每一个字符对应的next值
 7     {
 8         while(k > 0 && P[q] != P[k])//递归的求出P[0]···P[q]的最大的相同的前后缀长度k
 9             k = next[k-1];          //不理解没关系看下面的分析,这个while循环是整段代码的精髓所在,确实不好理解
10         if (P[q] == P[k])//如果相等,那么最大相同前后缀长度加1
11         {
12             k++;
13         }
14         next[q] = k;
15     }
16 }
时间: 2024-11-03 21:22:03

KMP next表模板的相关文章

C++顺序表模板练习 以及 剖析易出现的浅拷贝问题

/* C++顺序表模板练习 以及 剖析易出现的浅拷贝问题 */ #define _CRT_SECURE_NO_WARNINGS 1 #include <iostream> #include <string> using namespace std; template <typename T> class SeqList { public: SeqList(); SeqList(const SeqList& s); ~SeqList(); void PushBac

三、MySQL建表模板

1. 建表模板 SET FOREIGN_KEY_CHECKS=0; DROP TABLE IF EXISTS `g_test`; CREATE TABLE `g_test` (  `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',  `update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',  `begin_time` timestamp NULL

Excel员工考勤表模板,这三套送给您

考勤表不单单是公司员工每天上班的凭证,还是每个员工领工资的凭证,证据,它记录着员工每个月的上班次数:清晰的考勤表设置也够让员工做到心中有数,考勤表里面主要包括有迟到.早退.病假.事假.婚假等多种情况. 以下是几种不同格式的员工考勤表模板 excel考勤主要应用场景有员工出勤记录,公司职员签到,月度考勤,工资发放统计等.以上模板均来自办公资源网,喜欢的可以去看看. 地址:http://www.bangongziyuan.com/excel.html 原文地址:http://blog.51cto.c

2019-11-29-win10-uwp-列表模板选择器

原文:2019-11-29-win10-uwp-列表模板选择器 title author date CreateTime categories win10 uwp 列表模板选择器 lindexi 2019-11-29 10:18:0 +0800 2018-2-13 17:23:3 +0800 Win10 UWP 本文主要讲ListView等列表可以根据内容不同,使用不同模板的列表模板选择器,DataTemplateSelector. 如果在 UWP 需要定义某些列的显示和其他列不同,或者某些行的

线段树、KMP、HASH模板

线段树 #include<cstdio> using namespace std; int n,p,a,b,m,x,y,ans; struct node { int l,r,w,f; }tree[400001]; inline void build(int k,int ll,int rr)//建树 { tree[k].l=ll,tree[k].r=rr; if(tree[k].l==tree[k].r) { scanf("%d",&tree[k].w); retur

KMP、扩展KMP、Manacher模板

推导过程推荐看这篇: KMP模板: 1 void init(){ 2 int j = nex[0] = -1, i = 0; 3 int len = strlen(str); 4 while(i < len){ 5 if(j == -1 || str[i] == str[j]){ 6 nex[++i] = ++j; 7 }else j = nex[j]; 8 } 9 } 10 int KMP(){ 11 int i = 0, j = 0, sum = 0; 12 int len = strlen

831. KMP字符串(模板)

给定一个模式串S,以及一个模板串P,所有字符串中只包含大小写英文字母以及阿拉伯数字. 模板串P在模式串S中多次作为子串出现. 求出模板串P在模式串S中所有出现的位置的起始下标. 输入格式 第一行输入整数N,表示字符串P的长度. 第二行输入字符串P. 第三行输入整数M,表示字符串S的长度. 第四行输入字符串S. 输出格式 共一行,输出所有出现位置的起始下标(下标从0开始计数),整数之间用空格隔开. 数据范围 1≤N≤1041≤N≤1041≤M≤1051≤M≤105 输入样例: 3 aba 5 ab

拓展KMP算法 入门+模板

拓展KMP算法入门 博客推荐 扩展KMP算法, 图很形象,代码写的也很清晰,下面的模板就是出自该博客文章. 拓展KMP是求母串S长度为n和子串T长度为m,求S的每一个后缀子串与T的前缀子串匹配的最长长度. 代码实现 //求解模式串T的next数组,这个函数和下面的函数几乎相同 void getnext(string &T, int m, int[] next) { int a = 0, p = 0; next[0] = m; //T字符串自身和自身匹配 for(int i=1; i<m; i

线性表顺序表模板 纯本人手工创造

/* ***********************************************Author        :mubaixuCreated Time  :2015-12-08 20:45:05File Name     :线性表顺序存储操作************************************************ */ 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <mal