#Trie04. 能量脉冲序列
能量脉冲序列
题目名称:能量脉冲序列
知识点
- Trie字典树(前缀树)
- 前缀匹配统计
- 字符串前缀查询
题目描述
给定n个字符串,进行m次查询,每次查询一个字符串作为多少个字符串的前缀。
前缀匹配:
- 如果字符串A是字符串B的前缀,则B包含前缀A
- 例如:"ca"是"cat"、"car"、"card"的前缀
- 查询"ca"时,返回3(因为有3个字符串以"ca"为前缀)
要求:
- 使用Trie字典树存储所有字符串
- 插入时记录每个节点被多少个字符串经过
- 查询时返回以该字符串为前缀的字符串数量
输入格式
第一行包含两个整数 n 和 m,分别表示字符串的数量和查询的次数。 (1 ≤ n ≤ 1000, 1 ≤ m ≤ 1000)
接下来n行,每行一个字符串,表示要插入的字符串。 (字符串只包含小写字母,长度不超过50)
接下来m行,每行一个字符串,表示要查询的前缀。
输出格式
对于每个查询,输出一行,表示该字符串作为多少个字符串的前缀。
样例输入1
5 3
cat
car
card
dog
do
ca
car
do
样例输出1
3
2
2
样例1说明:
- "ca"是"cat"、"car"、"card"的前缀,返回3
- "car"是"car"、"card"的前缀,返回2
- "do"是"dog"、"do"的前缀,返回2
样例输入2
4 2
test
testing
tested
testify
test
tes
样例输出2
4
4
样例2说明:
- "test"是"test"、"testing"、"tested"、"testify"的前缀,返回4
- "tes"也是这4个字符串的前缀,返回4
样例输入3
3 3
hello
world
hi
h
he
w
样例输出3
2
1
1
样例3说明:
- "h"是"hello"、"hi"的前缀,返回2
- "he"是"hello"的前缀,返回1
- "w"是"world"的前缀,返回1
提示
- 插入时,在路径上的每个节点都计数+1(
pass[p]++) - 查询时,找到前缀对应的节点,返回
pass[p] - 如果前缀不存在,返回0
- 时间复杂度:O(ns + ms),其中s是字符串平均长度
考察知识点总结
- ✅ Trie字典树的插入和查询
- ✅ 前缀匹配统计
- ✅ 路径计数
- ✅ 字符串前缀查询
难度评估
难度: ⭐⭐⭐☆☆(中等)
适合: 学习Trie字典树的前缀匹配应用