#Trie02. 神秘复合词

神秘复合词

题目名称:神秘复合词

知识点

  • Trie字典树(前缀树)
  • 字符串分割
  • 枚举算法

题目描述

给定一个词典(包含n个单词),判断每个单词是否是"复合词"。

复合词定义:

  • 可以拆分成两个在词典中的单词
  • 例如:"catcar" = "cat" + "car",如果"cat"和"car"都在词典中,则"catcar"是复合词

要求:

  • 使用Trie字典树存储词典
  • 枚举每个单词的所有可能的断点
  • 判断左右两部分是否都在词典中

输入格式

第一行包含一个整数 n,表示词典中单词的数量。 (1 ≤ n ≤ 1000)

接下来n行,每行一个字符串,表示词典中的单词。 (字符串只包含小写字母,长度不超过50)

输出格式

输出所有复合词,每行一个。 如果没有复合词,不输出任何内容。


样例输入1

5
cat
car
dog
catcar
cardog

样例输出1

catcar
cardog

样例1说明:

  • "catcar"可以拆分成"cat"和"car",两个都在词典中
  • "cardog"可以拆分成"car"和"dog",两个都在词典中
  • "cat"、"car"、"dog"本身不能拆分(长度太短)

样例输入2

4
a
b
ab
ba

样例输出2

ab
ba

样例2说明:

  • "ab" = "a" + "b",两个都在词典中
  • "ba" = "b" + "a",两个都在词典中

样例输入3

3
hello
world
test

样例输出3

(无输出)

样例3说明:

  • 没有单词可以拆分成两个在词典中的单词

提示

  1. 先将所有单词插入Trie树
  2. 对于每个单词,枚举所有可能的断点位置(从1到length-1)
  3. 对于每个断点,检查左右两部分是否都在Trie树中
  4. 使用substr(0, i)获取左子串,substr(i)获取右子串
  5. 时间复杂度:O(ns²),其中s是字符串平均长度

考察知识点总结

  • ✅ Trie字典树的插入和查询
  • ✅ 字符串分割(substr函数)
  • ✅ 枚举算法(枚举断点)
  • ✅ 复合条件判断

难度评估

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

适合: 学习Trie字典树的应用和枚举算法