OlveraeUNSW
返回题目列表
COMP2521

Trie · 是不是一个已存单词

Trie · 是不是一个已存单词

先把 n 个小写单词插入一棵 Trie,再对 m 个查询,每个输出 yes(是一个已存单词)或 no(不是)。

最关键、也最容易错的一点:沿字符走到查询串末尾,只能说明它是某些已存词的前缀;它是不是一个被存过的完整单词,由末尾节点的 isEnd 决定。所以 search 的最后一步必须是 return cur->isEnd;,不能因为「路走通了」就直接 return true——那会把前缀(如已存 card 时查 ca)误判成单词。

insert 已给好,你只需补全 search:逐字符下降,遇到 child[c]==NULL 就 return false,走到末尾返回 cur->isEnd。
这正是 COMP2521 21T3 Q2 那类「某串是不是已存词 / 查找路径」的核心。

输入

  • 第 1 行:待插入单词数 n。
  • 接下来 n 行:每行一个小写单词。
  • 下一行:查询数 m。
  • 接下来 m 行:每行一个查询单词。

输出

  • m 行,每行 yes 或 no。

示例:存 car card dog,查 car ca card cat → yes / no / yes / no(ca 只是前缀、cat 路断了)。

样例

stdin
3
car
card
dog
4
car
ca
card
cat
期望输出
yes
no
yes
no
stdin
2
do
dog
3
do
dog
doge
期望输出
yes
yes
no
c-dcc
14