kmp算法

sunvin 2003-10-01 12:14:20
解决kmp算法的NEXT,NEXTVAL值时,有什么方法可以直接判定呢?必须用定义吗?NEXTVAL值一定要在NEXT值算出后才可以求出吗?
...全文
48 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Skt32 2003-10-04
  • 打赏
  • 举报
回复
回复人: mvmouse(mouse) ( ) 信誉:100 2003-8-6 22:48:34 得分:100



#include <string.h>

//KMP算法
int FindingString(const char* lpszSour, const char* lpszFind, int nStart /* = 0 */)
{
// ASSERT(lpszSour && lpszFind && nStart >= 0);
if(lpszSour == NULL || lpszFind == NULL || nStart < 0)
return -1;

int m = strlen(lpszSour);
int n = strlen(lpszFind);

if( nStart+n > m )
return -1;

if(n == 0)
return nStart;


int* next = new int[n];
//得到查找字符串的next数组
{
n--;

int j, k;
j = 0;
k = -1;
next[0] = -1;

while(j < n)
{
if(k == -1 || lpszFind[k] == '?' || lpszFind[j] == lpszFind[k])
{ j++;
k++;
next[j] = k;
}
else
k = next[k];
}
n++;
}

int i = nStart, j = 0;
while(i < m && j < n)
{
if(j == -1 || lpszFind[j] == '?' || lpszSour[i] == lpszFind[j])
{
i++;
j++;
}
else
j = next[j];
}

delete []next;

if (j >= n)
return i-n;
else
return -1;
}




tolixiaohui 2003-10-01
  • 打赏
  • 举报
回复
yes!
jet9600 2003-10-01
  • 打赏
  • 举报
回复
这里无所谓定义,nextval的确定也没有必要先知道next,
把教材看十遍你就知道了。

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧