最长公共前缀
Coddy 字典树:数据结构系列第 8 课 课程的第 10 课,共 14 课。
接下来的挑战会用到 Trie。
使用你在前几课中编写的 Trie 和 TrieNode 类(它们已提供在左侧的文件中)。每个挑战都会提供一个新的 solution 文件,你要在其中编写一个使用 Trie 的函数。
第一个问题:给定一个单词列表,找出它们共同拥有的最长公共前缀。将所有单词插入 Trie 后,答案就是从根节点向下的路径,条件是每一步都恰好只有一个子节点,并且当前节点不是单词的结尾。
挑战
简单编写一个函数 longestCommonPrefix,接收字符串数组 words,并返回数组中每个单词都以其为前缀的最长字符串。
如果数组为空,或不存在公共前缀,则返回空字符串。
你必须使用 Trie 类(它与 trienode 一起在 trie 中提供),不要使用语言内置的集合、字典或映射来计数或跟踪数据。
亲手试试
#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 = longestCommonPrefix(words, n);
printf("%s\n", res);
free(res);
return 0;
}
字典树:数据结构系列第 8 课中的所有课
自己练习: C 在线编译器