/*
* KMP 模式匹配算法
*/
#include
#include
using namespace std;
/*
* 计算模式串的next数组
* 模式串既做主串,又做模式串,进行匹配
* 时间复杂度为O(m),m为模式串的长度
*/
void countNext(char* strPattern, int len, int* next)
{
int i = 0, j...
分类:
其他好文 时间:
2014-08-25 17:01:04
阅读次数:
214
KMP是单模匹配算法,主串是S,模式串是P,查找P在S中出现的位置。主要是思想是主串的索引 i 递增,当主串与模式串发生不匹配时,把模式串右移,右移的位数为 j – fail[j] ,对于模式串计算fail函数,这个函数用来表示计算模式串某个位置发生失配时,模式串重新匹配的位置。fail应该指向最后...
分类:
其他好文 时间:
2014-08-22 12:41:16
阅读次数:
244
题目来源:URAL 1684. Jack's Last Word
题意:输入a b 把b分成若干段 每一段都是a的前缀
思路:b为主串 然后用a匹配b 记录到b的i位置最大匹配的长度 然后分割 分割的时候要从后往前
如果a = abac b = abab 那么如果从前往后 首先覆盖了aba 然后b就不能覆盖了 从后往前就可以了 首先覆盖ab 下一次还是ab
因为已经记录了到i位置的最大匹配...
分类:
其他好文 时间:
2014-08-12 22:19:14
阅读次数:
476
一周总结状态压缩:状态压缩无论是有关于图的遍历的还是图形和物体的放置的,都可归结于一类问题,那就是排列问题即先算谁的问题。如:hdu4295题意说将4个子串放入一个主串中,使得覆盖的字符数最大和最小。此题先预处理每个子串可在主串中放的位置pos[i][j]以kmp字符串匹配算法...
分类:
其他好文 时间:
2014-08-10 10:19:00
阅读次数:
205
1. 朴素的匹配算法(暴力匹配) 寻找子串p在主串s中第pos个字符后的位置。 分别利用计数指针i和j指示主串s和子串p中当前待比较的字符。算法的基本思想是:从主串s的第pos个字符起和模式的第一个字符比较,如果相等,继续逐个比较后续字符;否则从主串的下一个字符起,重新和模式的第一个字符比较。算法的...
分类:
其他好文 时间:
2014-08-08 23:51:51
阅读次数:
350
学习kmp算法我最后是看的数据结构书上的一本教材学会的。。我觉得kmp相对于普通的BF算法就是避免了很多不必要的匹配,而kmp算法的精髓自然就在于next数组的运用。。。而next数组简而言之就是存储的就是模式串中第j个字符与主串中相应字符“失配”时,在模式串中需要重新和主串中失配的字符相比较的位置。。。我觉得这句概括挺好的。。。
题1:
hdu 1711 number sequen...
分类:
其他好文 时间:
2014-08-04 14:34:27
阅读次数:
277
寻找一个串是否是另外一个字符串的子串序列。
可以想象主串是一连发子弹,而需要查找的子串是一队敌人,然后主串的字符是目标,把主串的所有子弹打完,是否能把子串的所有敌人消灭掉。
很简单的题目。
#include
const int MAX_N = 100001;
char seq[MAX_N], subSeq[MAX_N];
int main()
{
while (~scanf("%s %...
分类:
其他好文 时间:
2014-08-03 18:12:05
阅读次数:
172
题目地址:The Cow Lexicon题目大意: 奶牛有自己的识别单词的语言,它有自己的字典序列,如果给一串字符不符合奶牛的字典里的单词,奶牛就无法识别,你的任务就是找出给的字符串中包含给出奶牛字典的单词,至少从主串里删除几个字符,使主串只包含奶牛字典里的单词,不包含多于的字符。解题思路: ...
分类:
其他好文 时间:
2014-08-02 12:44:13
阅读次数:
345
今天是字符串填坑的一天,首先填的第一个坑是扩展KMP。总结一下KMP和扩展KMP的区别。在这里s是主串,t是模式串。KMP可以求出的是以s[i]为结尾的串和 t前缀匹配的最长的长度。假如这个长度是L的话,则:s[i-L+1...i]=t[0...L]而所谓的失配指针f[i]指的就是当前i点失配时要匹...
分类:
其他好文 时间:
2014-07-18 16:25:23
阅读次数:
272
在一个字串s1中查找一子串s2,若存在则返回子串在主串中的起始位置,不存在则返回-1。...
分类:
其他好文 时间:
2014-07-16 08:20:09
阅读次数:
237