最長共通接頭辞
Coddyの「トライ木 - データ構造シリーズ #8」コースのレッスン 10/14。
次のチャレンジは、Trieを使用するように設計されています。
前のレッスンで作成した Trie クラスと TrieNode クラスを使用してください(これらは左側のファイルに用意されています)。各チャレンジには、新しい solution ファイルが含まれており、そこで Trie を使用する関数を記述します。
最初の問題:単語のリストが与えられたとき、それらすべてに共通する 最長共通接頭辞 を見つけてください。すべての単語をトライ木に挿入した後、各ステップで子がちょうど1つだけ存在し、かつどのノードも単語の終端(end-of-word)でない限り、ルートから下に向かうパスが答えとなります。
チャレンジ
簡単文字列の配列 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;
}