算法二十八:前缀

这篇博客介绍了如何利用Trie树解决给定字符串集合中,查询字符串作为其他字符串前缀的计数问题。文章提供了伪代码和具体的C++实现,包括插入字符串到Trie树、遍历计算子树终止节点数量以及通过字符串查找相应节点的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

描述

给定n个字符串,再询问m次,每个询问给出一个字符串,求出这个字符串是n个字符串里,多少个串的前缀。

前缀:从头开始的一段连续子串。比如字符串ab是字符串abcd的前缀,也是字符串ab(自身)的前缀,但不是bab的前缀。

输入

第一行包含两个正整数n,m。

接下来n行,每行表示一个字符串,表示给定的n个字符串中的一个。

再接下来m行,每行一个字符串,表示询问的字符串。

输出

输出m行,每行表示询问的答案。

样例输入

5 4
ab
abc
ab
ba
bb
a
b
ab
abc

样例输出

3
2
3
1

样例解释

字符串a是ab、abc、ab的前缀;

字符串b是ba、bb的前缀;

字符串ab是ab、abc、ab的前缀;

字符串abc是abc的前缀。

 

提示

[trie树基本题。]

一. 伪代码

 

二. 具体实现(C+

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值