Menu
Coddy logo textTech

最長共通接頭辞

Coddyの「トライ木 - データ構造シリーズ #8」コースのレッスン 10/14。

次のチャレンジは、Trieを使用するように設計されています。

前のレッスンで作成した Trie クラスと TrieNode クラスを使用してください(これらは左側のファイルに用意されています)。各チャレンジには、新しい solution ファイルが含まれており、そこで Trie を使用する関数を記述します。

最初の問題:単語のリストが与えられたとき、それらすべてに共通する 最長共通接頭辞 を見つけてください。すべての単語をトライ木に挿入した後、各ステップで子がちょうど1つだけ存在し、かつどのノードも単語の終端(end-of-word)でない限り、ルートから下に向かうパスが答えとなります。

challenge icon

チャレンジ

簡単

文字列の配列 words を受け取り、配列内のすべての文字列に共通する最長の接頭辞を返す関数 longestCommonPrefix を作成してください。

配列が空の場合、または共通の接頭辞が存在しない場合は、空の文字列を返してください。

必ず 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のすべてのレッスン