Menu
CoddyTech

最长公共前缀

Coddy 字典树:数据结构系列第 8 课 课程的第 10 课,共 14 课。

接下来的挑战会用到 Trie。

使用你在前几课中编写的 Trie 和 TrieNode 类(它们已提供在左侧的文件中)。每个挑战都会提供一个新的 solution 文件,你要在其中编写一个使用 Trie 的函数。

第一个问题:给定一个单词列表,找出它们共同拥有的最长公共前缀。将所有单词插入 Trie 后,答案就是从根节点向下的路径,条件是每一步都恰好只有一个子节点,并且当前节点不是单词的结尾。

challenge icon

挑战

简单

编写一个函数 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 在线编译器