前缀统计
题目

输入

输出
对于每个询问,输出一个整数表示答案
每个答案占一行
输入样例
3 2
ab
bc
abc
abc
efg
输出样例
2
0
解题思路
我们把nnn个字符都存入TrieTrieTrie,然后记录一个特殊值来表示字符串的结尾是TrieTrieTrie上的节点xxx的字符串个数
程序如下
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int n, m, e[1000001], trie[1000001][26], tot = 1, ans;
char s[1000001], ss[1000001];
void handle()
{
scanf("%s", s + 1);
int len = strlen(s + 1), p = 1;
for(int i = 1; i <= len; ++i)
{
int c = s[i] - 'a';
if(!trie[p][c])
trie[p][c] = ++tot;
p = trie[p][c];
}
e[p]++;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i = 1; i <= n; ++i)
handle();
for(int i = 1; i <= m; ++i)
{
scanf("%s", ss + 1);
int len = strlen(ss + 1), p = 1;
ans = 0;
for(int j = 1; j <= len; ++j)
{
int c = ss[j] - 'a';
if(trie[p][c])
p = trie[p][c], ans += e[p];
else break;
}
printf("%d\n",ans);
}
return 0;
}
前缀统计:Trie树在字符串查询中的应用
本文讲解了如何使用Trie树数据结构解决字符串查询问题,通过统计以特定字符序列结尾的字符串数量,实现高效查找。通过实例展示了处理输入32个字符和一系列查询的操作过程和输出结果。
246

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



