首页 技术 正文
技术 2022年11月14日
0 收藏 478 点赞 3,692 浏览 1756 个字

题目

你知道的。

分析

分析不来。

代码

void OutputArray(int* pArr, int iLen)
{
for (int i = 0; i < iLen; i++)
{
printf("%d\t", pArr[i]);
}
printf("\n");
}void GetNextValue(char const* szPattern, int iLen, int* pNextArr)
{
int i = 0;
pNextArr[i] = -1;
int j = -1;
while (i < iLen - 1)
{
if (j == -1 || szPattern[i] == szPattern[j])
{
++i;
++j;
if (szPattern[i] != szPattern[j])
pNextArr[i] = j;
else
pNextArr[i] = pNextArr[j];
}
else
j = pNextArr[j];
}
}int KMP(const char * szTarget, const char * szPattern)
{
int iSrcLen = strlen(szTarget);
int iPatternLen = strlen(szPattern); int* pNextArr = new int[iPatternLen];
GetNextValue(szPattern, iPatternLen, pNextArr);
OutputArray(pNextArr, iPatternLen); int targetIndex = 0;
int patternIndex = 0;
while (targetIndex < iSrcLen && patternIndex < iPatternLen)
{
if (patternIndex == -1 || szTarget[targetIndex] == szPattern[patternIndex])
{
++targetIndex;
++patternIndex;
}
else
{
patternIndex = pNextArr[patternIndex];
}
} delete[] pNextArr; if (patternIndex >= iPatternLen)
return targetIndex - iPatternLen;
else
return -1;
}void GetNextValue2(char const* szPattern, int iLen, int* pNextArr)
{
int index = 0;
pNextArr[0] = -1;
for (int i = 1; i < iLen; ++i)
{
index = pNextArr[i - 1];
while (index >= 0 && szPattern[index + 1] != szPattern[i])
{
index = pNextArr[index];
}
if (szPattern[index + 1] == szPattern[i])
{
pNextArr[i] = index + 1;
}
else
{
pNextArr[i] = -1;
}
}
}int KMP2(const char* szTarget, const char* szPattern)
{
const int iSrcLen = strlen(szTarget);
const int iPatternLen = strlen(szPattern); int* pNextArr = new int[iPatternLen]; GetNextValue2(szPattern, iPatternLen, pNextArr);
OutputArray(pNextArr, iPatternLen); int patternIndex = 0;
int targetIndex = 0;
while (patternIndex < iPatternLen && targetIndex < iSrcLen)
{
if (szTarget[targetIndex] == szPattern[patternIndex])
{
++targetIndex;
++patternIndex;
}
else if (patternIndex == 0)
{
++targetIndex;
}
else
{
patternIndex = pNextArr[patternIndex - 1] + 1;
}
} delete[] pNextArr; if (patternIndex == iPatternLen)
return targetIndex - patternIndex;
else
return -1;
}
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,484
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,899
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,732
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,485
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,125
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,285