当字符串匹配失败时,模式串的指针并没有指向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