字典中的最长单词
Coddy 字典树:数据结构系列第 8 课 课程的第 13 课,共 14 课。
给定一个单词字典,找出能通过在字典中已有单词后面每次追加一个字符来构成的最长单词。只有当 "w"、"wo"、"wor" 和 "worl" 也都是已存储的单词时,"world" 才符合要求。
这正适合使用字典树。插入每个单词,然后从根节点开始进行 DFS,但只有在子节点标记为 isEndOfWord 时才继续向下搜索。这样,DFS 访问的每个节点都代表一条路径,且路径上的每个前缀本身都是一个单词。
记录最长路径。如果两条路径长度相同,就选择字典序较小的那个单词。
挑战
中等编写函数 longestWordInDict,接收字符串数组 words,并返回这样一个最长单词:它可以通过每次添加一个字符,从数组中的较短单词构建而成。
如果有两个单词长度相同,返回字典序较小的那个。如果数组为空,返回空字符串。
你必须使用 Trie 类(在 trie 和 trienode 中提供),不要使用语言内置的集合、字典或映射来计数或跟踪。
亲手试试
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "solution.h"
int main() {
char line[4096];
if (!fgets(line, sizeof(line), stdin)) line[0] = 0;
line[strcspn(line, "\r\n")] = '\0';
char* words[1024]; int n = 0;
char* tok = strtok(line, " \t");
while (tok && n < 1024) { words[n++] = tok; tok = strtok(NULL, " \t"); }
char* res = longestWordInDict(words, n);
printf("%s\n", res);
free(res);
return 0;
}
字典树:数据结构系列第 8 课中的所有课
自己练习: C 在线编译器