先对每行求出所有可能的循环节长度(不需要整除)。 然后取在所有行中都出现了的,且最小的长度为宽。 然后将每一行看作字符,对所有行求next数组,将n-next[n](对这些行来说最小的循环节长度)作为长。 最后输出长乘宽即可。 ...
分类:
编程语言 时间:
2017-02-19 15:23:12
阅读次数:
131
最长前缀(文件名:Prefix.pas/c/cpp) 一些生物体的复杂结构可以用其基元的序列表示,而一个基元用一个大写英文字符串 表示。生物学家的一个问题就是一个这样的长序列分解为基元(字符串)的序列。对于给 定的基元集合P,如果可以从中选出N 个基元P1,P2,P3,...,Pn,将它们各自对应的 ...
分类:
其他好文 时间:
2017-02-17 00:19:46
阅读次数:
244
数据结构课本上给了这么一段算法求nextval9[]数组 1 int get_nextval(SString T,int &nextval[ ]) 2 { 3 //求模式串T的next函数修正值并存入数组nextval。 4 i=1; nextval[1]=0; j=0; 5 while(i<T[0 ...
分类:
编程语言 时间:
2017-02-13 08:34:15
阅读次数:
238
数据结构课本上给了这么一段算法求nextval9[]数组 1 int get_nextval(SString T,int &nextval[ ]) 2 { 3 //求模式串T的next函数修正值并存入数组nextval。 4 i=1; nextval[1]=0; j=0; 5 while(i<T[0 ...
分类:
编程语言 时间:
2017-01-31 18:32:38
阅读次数:
276
KMP 算法,俗称“看毛片”算法,是字符串匹配中的很强大的一个算法,不过,对于初学者来说,要弄懂它确实不易。 笔者认为,KMP 算法之所以难懂,很大一部分原因是很多实现的方法在一些细节的差异。体现在几个方面: next 数组,有的叫做“失配函数”,其实是一个东西; next 数组中,有的是以下标为 ...
分类:
编程语言 时间:
2016-12-29 23:28:21
阅读次数:
350
目的: 为了解决字符串模式匹配 历程: 朴素模式匹配:逐次进行比较 KMP算法:利用匹配失败得到的信息,来最大限度的移动模式串,以此来减少比较次数提高性能 概念: m:是目标串长度 n:是模式串长度 j:某次匹配时,第一次出现的不同的索引位置(有的称为:失配位) k:最长首尾串长度(有的称为:最长公 ...
分类:
编程语言 时间:
2016-12-14 13:49:51
阅读次数:
308
复习一下KMP算法 KMP的主要思想是利用字符串自身的前缀后缀的对称性,来构建next数组,从而实现用接近O(N)的时间复杂度完成字符串的匹配 对于一个字符串str,next[j] = k 表示满足str[0...k-1] = str[j-k...j-1]的最大的k,即对于子串str[0...j-1 ...
分类:
其他好文 时间:
2016-12-03 20:52:47
阅读次数:
154
foreach遍历基本语法:foreach(数组名as键变量=>值变量){循环体}foreach(数组名as值变量){循环体}数组指针相关函数key(数组名):获取该数组当前元素的键current(数组名):获取该数组当前元素的值next(数组名):将数组的指针下移一位reset(数组名):重置数组的指针(将数组的指针..
分类:
Web程序 时间:
2016-11-24 21:57:23
阅读次数:
177
一、数组操作的基本函数数组的键名和值array_values($arr); 获得数组的值array_keys($arr); 获得数组的键名array_flip($arr); 数组中的值与键名互换(如果有重复前面的会被后面的覆盖)in_array("apple",$arr); 在数组中检索applea ...
分类:
编程语言 时间:
2016-11-17 07:50:08
阅读次数:
185
KMP算法 一、普通的字符串匹配 平时我们在写普通的字符串匹配算法的时候,是拿着要匹配的串去匹配被匹配的串,字符逐个比较,当发现字符失配时,被匹配的字符串的指针要回到前一次开始匹配的指针的下一个位置。这里我们称要去匹配的字符串为模式串P,被匹配的字符串为主串S,即我们拿模式串P去匹配主串S,看看P是 ...
分类:
编程语言 时间:
2016-11-13 19:44:28
阅读次数:
252