由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 问一个KMP算法的问题
相关主题
PDF - LeetCode 200+ 题目总结问个题?
Google 2 phone interviews exposed + 求祝福C++ 面试题
请问 KMP算法重要吗?请问这样写程序错了吗?
给大家推荐个网站,interviewstreet.comA challenging interview question: revert a string
能不能讨论一下kmp这题谁知道答案?
Populating Next Right Pointers in Each Node II分享一道最近碰到的很好的面试题。
问一个精华区里的题目请教一个字符串比较排序的问题 (转载)
菜鸟求救 请大家看看我的代码有没有问题问两个题
相关话题的讨论汇总
话题: next话题: kmp话题: 匹配话题: pattern话题: 算法
进入JobHunting版参与讨论
1 (共1页)
w****3
发帖数: 110
1
新手,看了一整天KMP算法,还是没有搞得很清楚。希望大牛给讲讲。
假设一个pattern string p, KMP的第一步是用pattern生成一个next array。根据这
个博客里讲的
http://www.cnblogs.com/dolphin0520/archive/2011/08/24/2151846.h
根据定义next[0]=-1,假设next[j]=k, 即P[0...k-1]==P[j-k,j-1]
1)若P[j]==P[k],则有P[0..k]==P[j-k,j],很显然,next[j+1]=next[j]+1=k+1;
2)若P[j]!=P[k],则可以把其看做模式匹配的问题,即匹配失败的时候,k值如何移
动,显然k=next[k]。
void getNext(char *p,int *next)
{
int j,k;
next[0]=-1;
j=0;
k=-1;
while(j {
if(k==-1||p[j]==p[k]) //匹配的情况下,p[j]==p[k]
{
j++;
k++;
next[j]=k;
}
else //p[j]!=p[k]
k=next[k];
}
}
我的问题是为什么最后一个statement是k = next[k]而不是直接check k = 0是否匹配
呢?我想了半天想不出来反例。不应该是P[k]总是和p[next[k]]相等的吗?
s**x
发帖数: 7506
1 (共1页)
进入JobHunting版参与讨论
相关主题
问两个题能不能讨论一下kmp
大家看看我写的这个itoa有没有bugPopulating Next Right Pointers in Each Node II
leetcode上wild match问一个精华区里的题目
被thank you的fb电面面经菜鸟求救 请大家看看我的代码有没有问题
PDF - LeetCode 200+ 题目总结问个题?
Google 2 phone interviews exposed + 求祝福C++ 面试题
请问 KMP算法重要吗?请问这样写程序错了吗?
给大家推荐个网站,interviewstreet.comA challenging interview question: revert a string
相关话题的讨论汇总
话题: next话题: kmp话题: 匹配话题: pattern话题: 算法