あなたの「用語集」(文字列の配列)言葉と「アルファベット」(文字列)文字を付けます。
あなたは「単語」「手紙」の文字と(文字列)(文字)で単語を綴ることができるなら、我々はあなたが言葉を習得したと思います。
注:たびスペリングは、各文字は一度だけ使用することができます文字。
あなたは長さの合計をマスターしているすべての単語に語彙を返します。
例1:
入力:言葉= [「猫」、 「BT」、「帽子」、「木」]、文字=「atach」
出力:6
説明:
答えは3 + 3であるので、文字列「猫」と「帽子」を形成することができます= 6。
出力:6
説明:
答えは3 + 3であるので、文字列「猫」と「帽子」を形成することができます= 6。
例2:
入力:言葉= [ "こんにちは"、 "世界"、 "leetcode"]、文字= "welldonehoneyr"
出力:10
説明:
答えは5 + 5 = 10であるので、文字列"こんにちは"と"世界"を形成することができます。
出力:10
説明:
答えは5 + 5 = 10であるので、文字列"こんにちは"と"世界"を形成することができます。
ヒント:
1 <= words.length <= 1000
。1 <=ワード[I] .LENGTH、chars.length <= 100
すべての文字列は、小文字であります
アイデア:ちょうど今日はハッシュテーブルを適用している知っているキー値(例えばASCLLコード)に基づいて、データ要素にテーブル、直接アクセスを作成し、迅速なルックアップテーブルを達成することです。値は、ループの外に0以上続いている場合は、CPの文字が表示されますが、対応する文字の配列から1つのを引いた数に一度、この質問最初の英数字アルファベットを記録し、各単語のルートを比較している思考しますこのとき、再決定した言葉[I] [J] \ 0かどうか、それが最後に通過しないことを意味しない、それは完全な単語、サイクルが続く、そうでない場合は文字列の長さではありませんプラス。
1 int型 countCharacters(チャー **単語、INT wordsSize、チャー * 文字) 2 { 3 int型 charsElemNum [ 26である ] = { 0 }; 4 int型の長さ= 0 ; 5 INT I、J; 6 7。 ため(J = 0 ;文字[J]; J ++)// アルファベットのためにカウント 8。 { 9。 charsElemNumの[chars [J] - 97 ] ++ ; 10 } 11。 int型 CPを[26である]; 12は 13である ため(私は= 0 ; I <wordsSize I ++ ) 14 { 15 用(J = 0 ; Jが< 26である ; J ++ ) 16 { 17 CP [J] = charsElemNum [J]; // コピーアルファベット要素 18は } 。19 20である ため(J = 0 ;ワード[I]、[J]; J ++ ) 21は 、{ 22は CP [言葉[I]、[J] - 97 ] - ; 23である IF(CP [単語[I] [J] - 97] < 0 ) 24 ブレーク。 25 } 26 27 であれば(つまり[I] [J] =!' \ 0 ' ) 28が 継続。 29 他の 30 の長さ+ = J; 31 } 32 33 戻り長。 34 }