序列自动机
非常好用的算法,可以在O(1)的时间复杂度判断i后面x第一次出现的位置。
#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;
int a[50],nxt[100010][50],pre[50];
int main()
{
int i,j,n;
cin>>n;
for(i=0;i<n;i++)
{
cin>>a[i];
}
memset(pre,-1,sizeof(pre)); //初始化赋值-1
for(i=n;i>=0;i--)
{
for(j=0;j<10;j++)
{
nxt[i][j]=pre[j];
}
pre[a[i]]=i;
}
//cout<<nxt[0][2]<<endl;
//nxt[i][x]表示第i个下标后面x第一次出现的位置。找不到返回-1
return 0;
}
本文介绍了一种高效的算法——序列自动机,能在常数时间内判断字符序列中某个字符首次出现的位置。通过C++代码实例演示了如何使用nxt数组和pre数组进行操作,这对于字符串处理和模式匹配非常实用。
213

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



