SP2416 DSUBSEQ - Distinct Subsequences

题意

求本质不同的子串个数(包括空串)

思路

序列自动机裸题
直接上代码

\(Code\)

#include<cstdio>
#include<cstring>
using namespace std;
typedef long long LL;

const int N = 2e5 + 5;
const int P = 1e9 + 7;
int n , nxt[N][30];
LL f[N];
char s[N];

inline LL dfs(int x)
{
	if (f[x]) return f[x];
	for(register int i = 0; i < 26; i++)
	if (nxt[x][i]) f[x] = (f[x] + dfs(nxt[x][i])) % P;
	return f[x] = (f[x] + 1) % P;
}

int main()
{
	scanf("%d" , &n);
	int len;
	while (n--)
	{
		scanf("%s" , s + 1);
		len = strlen(s + 1);
		memset(nxt , 0 , sizeof nxt);
		memset(f , 0 , sizeof f);
		for(register int i = len; i; i--)
		{
			for(register int j = 0; j < 26; j++) nxt[i - 1][j] = nxt[i][j];
			nxt[i - 1][s[i] - 'A'] = i;
		}
		printf("%lld\n" , dfs(0) % P);
	}
}
上一篇:SQL基础


下一篇:HTML学习记录