当字符串匹配失败时,模式串的指针并没有指向0从头比较,而是指向了一个特定的位置,因为这个Next[j]指向的位置pos前长度为Next[pos]的子串,同模式串第j位前的长度为Next[j]的子串是相同的。
即S[0]~S[Next[j]]一定与S[len-1-Next[j]]~S[j-1]匹配。
1.既能做前缀又能做后缀的子串长度 ans[0] = len;
int id...
分类:
其他好文 时间:
2015-05-03 23:46:36
阅读次数:
169
使用java代码实现!
public class Matching {
public static void main(String[] args) {
BF();
}
public static void BF() {
String BF_S = "aaaabbbaab"; //主串
String BF_T = "aaab"; //模式串
int BFSLeng...
分类:
编程语言 时间:
2015-05-01 17:26:14
阅读次数:
172
题目链接:http://poj.org/problem?id=3167题意:模式串可以浮动的模式匹配问题给出模式串的相对大小,需要找出模式串匹配次数和位置。思路:统计比当前数小,和于当前数相等的,然后进行kmp。比如说模式串:1,4,4,2,3,1 而主串:5,6,2,10,10,7,3,2,9,那...
分类:
其他好文 时间:
2015-04-30 15:54:32
阅读次数:
167
char str[1000010],pat[1000010];//pat为模式串,str为主串
int Next[1000010]; //Next[x]下标x表示匹配失败处字符下标
//模式串pat的前缀与x位置的后缀的最大匹配字符个数-1
void GetNext(char *pat)
{
int LenPat = strlen(pat);
int i = 0,j = -1;
...
分类:
其他好文 时间:
2015-04-28 21:10:30
阅读次数:
143
http://acm.hdu.edu.cn/showproblem.php?pid=2222
Problem Description
In the modern time, Search engine came into the life of everybody like Google, Baidu, etc.
Wiskey also wants to bring th...
分类:
其他好文 时间:
2015-04-27 11:13:51
阅读次数:
92
学习ac自动机需要先会kmp和trie:kmp | trie终于入门了,看了一天,现在整理一下。算法简介:AC自动机主要用于解决多模式串的匹配问题。如hdu2222:给定N(N next[id]==NULL) p->next[id]=new Trie(); p=p...
分类:
其他好文 时间:
2015-04-24 06:36:56
阅读次数:
166
AC自动机在trie树上实现KMP的一种数据结构,可以完成多模式串的匹配,核心要理解fail指针的含义,即让当前字符失配时跳转到具有最长公共前后缀的字符继续匹配,从根节点到当前节点(s)fail指针的节点(p)的路径字符串必定为从根节点到节点s的路径字符串的一个后缀,还有理解trie图,当字符串.....
分类:
其他好文 时间:
2015-04-23 23:08:44
阅读次数:
283
1 // 求目标串中出现了几个模式串 2 //==================== 3 #include 4 #include 5 #include 6 #include 7 #include 8 using namespace std; 9 10 struct ...
分类:
其他好文 时间:
2015-04-23 07:03:55
阅读次数:
92
题目大意:
给你两个串S1和S2,求既是S1的前缀同时是S2的后缀的最长字符串及长度。
思路:
KMP算法中Next[j] == k的实质是当前字母不匹配时,模式串的前k项(S0~Sk-1)和位置j前
的k项(Sj-1-k~Sj-1)是相等的,这个k值是所有满足上面情况最大的。那么Next[len]的含义
就是模式串的最长的前缀和后缀相等的串长度。
利用Next[]的性质,先将串S2连接到S1后边。求S1的Next[]数组。那么,现在的Next[len]
就是S1的前缀和S2的后缀最长的长度,这是当这个长...
分类:
其他好文 时间:
2015-04-22 22:14:28
阅读次数:
116
hihocoder.com 上的KMP算法题,搞了半天在VS2012是能通过的,提交上去就是有问题,反复改终于通过了,记录在此,以下是测试通过代码。输入第一行一个整数N,表示测试数据组数。接下来的N^2行,每两行表示一个测试数据。在每一个测试数据中,第一行为模式串,由不超过10^4个大写字母组成,第...
分类:
编程语言 时间:
2015-04-22 22:10:02
阅读次数:
137