タイトル説明
単語のリストを考えると、このリストには、文字列SインデックスとインデックスリストAとしてエンコードされます
例えば、リストが[ "時間"、 "私"、 "ベル"]、我々は、S = "タイム#ベル#" とインデックス= [0、2、5]のように表すことができます。
各インデックスのために、私たちは言葉の私達の前のリストを復元するには、「#」終了までの位置にある文字列Sから文字列のインデックスを読むことによって開始することができます。
そして、エンコーディングのための与えられた単語リストを成功させるために、文字列の最小の長さはどのくらいですか?
例:
入力:言葉= [ "時間"、 "私"、 "ベル"]
出力:10
説明:S = "時間#ベル# "、インデックス= [0、2、5]。
ヒント:
1 <= words.length <= 2000
。1 <=ワード[I] .LENGTH <= 7
各ワード小文字。
問題解決のためのアイデア
降順に従って各単語の長さ、
そして、このフィールドのStringBuilderを追加し、全体の配列は、単語単語、裁判官のStringBuilderのそこには言葉#このフィールドはありません、そうでない場合に遭遇したトラバース
長さのStringBuilderへ戻ります
コードは以下の通りです
パッケージleetcode。
輸入java.util.Arrays。
パブリック クラスMinimumLengthEncoding {
公共 のint minimumLengthEncoding(文字列[]語){
は、Arrays.sort(単語(文字列WORD1、ストリングWORD2) - > word2.length() - word1.length())。
StringBuilderのSB = 新しいStringBuilderの();
sb.append(単語[ 0] + "#" )。
以下のために(INT I 0 =; I <words.length; I ++ ){
場合(sb.indexOf(単語[I] + "#")== - 1 ){
sb.append(単語[I] + "#") ;
}
}
戻りsb.length()。
}
}