になりますので単語な長さで辞書項目をソートすることによって開始することができ O(n)の方法グラフを作成すると、頂点はアルファベットになります。あなたは、各文字のためのあなたのテキストを訪問しているとき、あなたはその手紙のためのadyacencyリストをご覧ください。
:あなたの辞書内の各単語について、あなたは次のようにグラフの何かの最初の文字を追加します。リストの各項目について、その単語の次の文字を追加する必要があります。あなたの例では
あなたは、その文字
[{"ab", 0}, {"add", 0}, {"aced", 0}]
とあなたのグラフを更新
G = {{'b', [{"ab", 1}]}, {'d', ["add", 1]}, {'c', [{"aced", 1}]}}
- 文字 'B' のリストを訪問 - あなたが訪問する> S [1]
をその文字のリスト
[{"ab", 1}]
、あなたは「AB」を終えたとして、あなたはあなたの答えを改善しようとすることができます
G = {{'d', ["add", 1]}, {'c', [{"aced", 1}]}}
あなたのグラフを更新します。
あなたは、その文字
[{"aced", 1}]
と
G = {{'d', ["add", 1]}, {'e', [{"aced", 2}]}}
- あなたのグラフを更新する文字のリストをご覧ください。 'c' - > S [3]
その後、あなたは次の文字
- 文字 'D' を続け、その文字のためにそこにリストアップされていません - あなたは、その文字 ためのリストをご覧ください。> S [4]
["add", 1]
とあなたのグラフ
G = {{'d', ["add", 2]}, {'e', [{"aced", 2}]}}
0を更新 ...
を「追加」の実行は、あなたは、問題の制約とソリューションについてのいくつかの詳細を提供することはできますか? *辞書*をトライに格納する場合、複雑さは 'O(n * m)ではなく' O(n * k) '(ここで' k'は開始文字列の長さです)でなければなりません。しかし、それはあなたが辞書ごとに1単語だけを照会すれば悪くなるでしょう。 – Kittsil
ありがとうございます。私のソリューションは、ツリーを使用して辞書を保存します。しかし、すべてのツリーノードにタグを追加して、文字列の特定の接頭辞にこのノードの接頭辞のサブシーケンスがあるかどうかを示します。 – Trumen
"abdc"の場合、辞書は{"abc"、 "adc"}です。トライ木は「a→(b→c、d→c)」である。最初は、すべてのノードのタグはfalseに設定されています。私はハッシュマップを使って次回から興味のあるすべてのノードを保存しています。最初はマップが{'a': "a node"}ですが、abcdをトラバースするようになりました。ノード "を真にする。 "bノード"と "dノード"をマップに追加し、動的プログラミングを使用して文字列をトラバースし、すべてのノードの状態を更新します。最長の「真の」ノードが解決策になります。 – Trumen