给定一个单词列表,我们将这个列表编码成一个索引字符串 S 与一个索引列表 A。

对于每一个索引,我们可以通过从字符串 S 中索引的位置开始读取字符串,直到 "#" 结束,来恢复我们之前的单词列表。

那么成功对给定单词列表进行编码的最小字符串长度是多少呢?

因此符合直觉的想法是使用前缀树 + 倒序插入的形式来模拟后缀树。

下面的代码看起来复杂,但是很多题目我都是用这个模板,稍微调整下细节就能 AC。我这里总结了一套前缀树专题​

其中 startWith 是前缀树最核心的用法,其名称前缀树就从这里而来。大家可以先拿 208 题 开始,熟悉一下前缀树,然后再尝试别的题目。

一个前缀树大概是这个样子:

如图每一个节点存储一个字符,然后外加一个控制信息表示是否是单词结尾,实际使用过程可能会有细微差别,不过变化不大。