题目描述
给定N个字符串S1,S2…SN,接下来进行M次询问,每次询问给定一个字符串T,求S1∼SN中有多少个字符串是T的前缀。输入字符串的总长度不超过106,仅包含小写字母。
输入
第一行两个整数N,M。接下来N行每行一个字符串Si。接下来M行每行一个字符串表示询问。
输出
对于每个询问,输出一个整数表示答案
样例输入
3 2
ab
bc
abc
abc
efg
样例输出
2
0
题解:
基础字典树
把这N个字符串先插入字典树,字典树的每个节点上存储该节点是多少个字符串的末尾节点。(因为这里要重复插入字符串,所以要记录个数,而不能只做标记)
对于每个询问,我们只需要在字典树中检索字符串T,在检索过程中累加途径的每个节点的cnt值,得到答案。
源代码:
#include<bits/stdc++.h>
using namespace std;
const int N=1000005;
int trie[N][26],tot=1;
int cnt[N];
int n,m

本文介绍了如何使用字典树(Trie)解决字符串前缀统计的问题。首先,将给定的N个字符串插入字典树,并在每个节点存储其作为字符串末尾的计数。然后,对于每次查询,通过遍历字典树并累计路径上的节点计数来获取答案。样例输入和输出展示了算法的应用。
最低0.47元/天 解锁文章
576

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



