nex[i][j]表示在原串s时第i位后面第一个字母j出现的位置
初始化:
(scanf("%s",s+1);
int len = strlen(s+1)
for(int i=len;i>=1;i--)
{
for(int j=0;j<26;j++) nex[i-1][j] = nex[i][j];
nex[i-1][s[i]-'a'] = i;
}
例如:s = “abbc”
nex[3][a] = nex[3][b] = nex[3][c] = 0
nex[3][c] = 4
nex[2][a] = nex[2][b] = 0
nex[2][c] = nex[3][c] = 4;
nex[2][b] = 3
nex[1][a] = 0
nex[1][b] = nex[2][b] = 3
nex[1][c] = nex[2][c] = 4
nex[1][b] = 2
nex[0][a] = nex[1][a] = 0;
nex[0][b] = nex[1][b] = 3;
nex[0][c] = nex[1][c] = 4;
nex[0][a] = 1
应用 1:
判断是否为字串:
bool ans = ture;
for(int i=0,now=0;a[i];i++)
{
now = nex[i][a[i]-'a'];
if(now==0)
{
ans = false;
break;
}
}
本文深入解析了Nex数组的概念及其在字符串匹配中的应用。Nex数组用于记录原串中每个位置后首次出现各字母的位置,通过初始化过程展示如何构建Nex数组,并通过实例说明其在判断子串存在性的过程中的作用。

646

被折叠的 条评论
为什么被折叠?



