KMP算法
2016-06-23 11:25
253 查看
字符串匹配(KMP算法)
/**** **** **** **** **** ****
* Function Name : 字符串匹配(KMP算法)
* Description : O(N+M)
**** **** **** **** **** ****/
void get_nextval(const string & s, int * p)
{
int i = 0,j = -1;
p[0] = -1;
while(i < s.size()) {
if(j == -1 || s[i] == s[j]) {
++i,++j;
if(s[i] != s[j]) p[i] = j;
else
p[i] = p[j];
}
else j = p[j];
}
}
int Index_KMP(const string & s, const string & s1, int pos)
{
int i = pos - 1,j = 0;
int * next = new int[s1.size()];
get_nextval(s1,next);
while(i <= s.size() && j <= s1.size()) {
if(j == -1 || s[i] == s1[j]) ++i,++j;
else j = next[j];
}
if(j > s1.size()) return i - s1.size();
else return -1;
}
/**** **** **** **** **** ****
* Function Name : 字符串匹配(KMP算法)
* Description : O(N+M)
**** **** **** **** **** ****/
void get_nextval(const string & s, int * p)
{
int i = 0,j = -1;
p[0] = -1;
while(i < s.size()) {
if(j == -1 || s[i] == s[j]) {
++i,++j;
if(s[i] != s[j]) p[i] = j;
else
p[i] = p[j];
}
else j = p[j];
}
}
int Index_KMP(const string & s, const string & s1, int pos)
{
int i = pos - 1,j = 0;
int * next = new int[s1.size()];
get_nextval(s1,next);
while(i <= s.size() && j <= s1.size()) {
if(j == -1 || s[i] == s1[j]) ++i,++j;
else j = next[j];
}
if(j > s1.size()) return i - s1.size();
else return -1;
}
相关文章推荐
- 字符串的模式匹配详解--BF算法与KMP算法
- C语言kmp算法简单示例和实现原理探究
- C语言中实现KMP算法的实例讲解
- 基于KMP算法JavaScript的实现方法分析
- C语言实现字符串匹配KMP算法
- KMP算法精解及其Python版的代码示例
- KMP算法精解及其Python版的代码示例
- KMP算法
- KMP算法的实现
- PHP KMP算法实现
- LeetCode -- Implement strStr()
- KMP算法
- 字符串的next特征函数,KMP算法,C++
- BF算法和KMP算法对比
- 【HDU 4150】Powerful Incantation —— 字符串匹配
- KMP算法总结
- KMP算法中的前缀函数
- KMP算法(通俗易懂的字符串比较算法)
- Cyclic Nacklace
- Wow! Such Doge!