题意:
给出一个字符串,问有几个不同子串
思路:
问不同子串的个数,如果用 trie 树来理解的话就是,问 trie 树的节点个数。算法复杂度在O(n^2)
代码:( trie 树的建立使用了 Kuangbin 大大的 AC自动机模板)
由于 AC 自动机大部分时间损耗在初始化 每个节点上,故经过“测试”,本题字符在 ' ! ' 到 ' Z ' 之间,优化至 70 ms。(若直接用 128 的数组,160ms已超时)
#include <stdio.h>
#include <algorithm>
#include <iostream>
#include <string.h>
#include <queue>
using namespace std;
int ans;char buf[2000];
struct Trie
{
int next[500010][60];
int root,L;
int newnode()
{
for(int i = 0; i < 60; i++)
next[L][i] = -1;
L++;
ans++;
return L-1;
}
void init()
{
L = 0;
root = newnode();
}
void insert(int k,int len)
{
int now = root;

该博客介绍了如何使用Trie树解决寻找字符串不同子串数量的问题。题目要求求解给定字符串的不重复子串个数,通过建立Trie树可以将算法复杂度降低到O(n^2)。博主分享了使用Kuangbin大大的AC自动机模板建立Trie树的代码,并针对字符范围进行优化,从而在限制时间内得到解决方案。博客提供了样例输入和输出,解释了不同长度子串的计数方式。
最低0.47元/天 解锁文章
3117

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



