タイトル
単語のリストを考えると、このリストには、文字列SインデックスとインデックスリストAとしてエンコードされます
例えば、リストが[ "時間"、 "私"、 "ベル"]、我々は、S = "タイム#ベル#" とインデックス= [0、2、5]のように表すことができます。
各インデックスのために、私たちは言葉の私達の前のリストを復元するには、「#」終了までの位置にある文字列Sから文字列のインデックスを読むことによって開始することができます。
そして、エンコーディングのための与えられた単語リストを成功させるために、文字列の最小の長さはどのくらいですか?
例:
入力:言葉= [ "時間"、 "私"、 "ベル"]
出力:10
説明:S = "時間#ベル# "、インデックス= [0、2、5]。
ヒント:
1 <= words.length <= 2000
。1 <=ワード[I] .LENGTH <= 7
各ワード小文字。
思考
2番目の単語から、前のサイクルの後方との比較。同じレコードを計算します。
サンプルによる25/30の解決、アップよりも愚かな。よりよいのための基本的に不可能変更。疲れた心
や公式のバーコードを見て。
コード
class Solution:
def minimumLengthEncoding(self, words: List[str]) -> int:
good = set(words)
for word in words:
for k in range(1, len(word)):
good.discard(word[k:])
return sum(len(word) + 1 for word in good)
链接:https://leetcode-cn.com/problems/short-encoding-of-words/solution/dan-ci-de-ya-suo-bian-ma-by-leetcode-solution/
来源:力扣(LeetCode)
本当に感動やブラインドに知識。
set()メソッド
セット()関数は、要素の順序付けられていないセットを作成するなど、関係を試験することができ、重複排除をも計算することができる交差点、差、およびセットを繰り返しません。
例:
a='handsome'
print(set(a))
結果:
{ 'O'、 'N-'、 'H'、 'S'、 'E'、 'M'、 'A'、 'D'}
の要素のセットを使用することができる、更新、削除、追加等
a='handsome'
b=set(a)
print(b)
b.add('me')
b.update('are')
print(b)
b.update('are')
print(b)
b.remove('are')
print(b)
結果:
{'o', 's', 'e', 'm', 'n', 'a', 'h', 'd'}
{'o', 's', 'e', 'm', 'n', 'r', 'me', 'a', 'h', 'd'}
{'o', 's', 'e', 'm', 'n', 'r', 'me', 'a', 'h', 'd'}
セット()廃棄与削除
廃棄()メソッドは、指定されたコレクションの要素を除去するために使用されます。
この方法削除()メソッドと異なり、存在しない要素を除去し、廃棄()メソッドはしないときにエラーのremove()メソッドが発生するため。
トライ
思考
この方法は、としての目標は、他のすべての単語の接尾辞の予約語ではない、と述べました。
このアルゴリズムは、
同じサフィックスを持つ異なる単語が、我々は逆の順序でそれの後に辞書ツリーに挿入することが可能かどうかを検索します。たとえば、私たちは、「EM」は辞書ツリーに挿入することができ、「時間」と「私」、「EMIT」を持っています。
その後、サフィックスのない単語の代わりに辞書ツリー(子供なしのノード)のリーフノードは、ワード長統計リーフノードは、プラス1を表し、それは私たちが答えを望むものです。
リンク:https://leetcode-cn.com/problems/short-encoding-of-words/solution/dan-ci-de-ya-suo-bian-ma-by-leetcode-solution/
出典:滞在ボタン(LeetCode )
コード
class Solution:
def minimumLengthEncoding(self, words: List[str]) -> int:
words = list(set(words)) #remove duplicates
#Trie is a nested dictionary with nodes created
# when fetched entries are missing
Trie = lambda: collections.defaultdict(Trie)
trie = Trie()
#reduce(..., S, trie) is trie[S[0]][S[1]][S[2]][...][S[S.length - 1]]
nodes = [reduce(dict.__getitem__, word[::-1], trie)
for word in words]
#Add word to the answer if it's node has no neighbors
return sum(len(word) + 1
for i, word in enumerate(words)
if len(nodes[i]) == 0)