Menu
CoddyTech

统计前缀匹配的单词

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

有多少个已存储的单词以给定前缀开头?插入所有单词后,从根节点开始,沿着前缀逐个字符遍历。如果缺少任何一个字符,答案就是 0,没有单词可能以该前缀开头。

如果到达前缀末尾,你就会到达一个节点。每个以此前缀开头的已存储单词都位于该节点的子树中。遍历这棵子树,并在每个 isEndOfWord 为 true 的节点处加 1,即可统计单词数量。

challenge icon

挑战

简单

编写一个函数 countWordsWithPrefix,接收一个字符串数组 words 和一个字符串 prefix,并返回数组中以给定前缀开头的单词数量。

空前缀与每个单词都匹配。

你必须使用 Trie 类(在 trie 和 trienode 中提供),不要使用集合、字典或映射等语言内置类型来计数或跟踪单词。

亲手试试

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "solution.h"

int main() {
    char l1[4096], prefix[1024];
    if (!fgets(l1, sizeof(l1), stdin)) l1[0] = 0;
    if (!fgets(prefix, sizeof(prefix), stdin)) prefix[0] = 0;
    l1[strcspn(l1, "\r\n")] = '\0';
    prefix[strcspn(prefix, "\r\n")] = '\0';
    char* words[1024]; int n = 0;
    char* tok = strtok(l1, " \t");
    while (tok && n < 1024) { words[n++] = tok; tok = strtok(NULL, " \t"); }
    printf("%d\n", countWordsWithPrefix(words, n, prefix));
    return 0;
}

字典树:数据结构系列第 8 课中的所有课

自己练习: C 在线编译器