#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. 插入时,在路径上的每个节点都计数+1(pass[p]++
  2. 查询时,找到前缀对应的节点,返回pass[p]
  3. 如果前缀不存在,返回0
  4. 时间复杂度:O(ns + ms),其中s是字符串平均长度


考察知识点总结

  • ✅ Trie字典树的插入和查询
  • ✅ 前缀匹配统计
  • ✅ 路径计数
  • ✅ 字符串前缀查询

难度评估

难度: ⭐⭐⭐☆☆(中等)

适合: 学习Trie字典树的前缀匹配应用