ハッシュテーブル:単語をスペル(3.17 leetcode毎日パンチ)

あなたの「用語集」(文字列の配列)言葉と「アルファベット」(文字列)文字を付けます。
あなたは「単語」「手紙」の文字と(文字列)(文字)で単語を綴ることができるなら、我々はあなたが言葉を習得したと思います。
注:たびスペリングは、各文字は一度だけ使用することができます文字。
あなたは長さの合計をマスターしているすべての単語に語彙を返します。
 
例1:
入力:言葉= [「猫」、 「BT」、「帽子」、「木」]、文字=「atach」
出力:6
説明:
答えは3 + 3であるので、文字列「猫」と「帽子」を形成することができます= 6。

例2:
入力:言葉= [ "こんにちは"、 "世界"、 "leetcode"]、文字= "welldonehoneyr"
出力: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 }

 

 

 

おすすめ

転載: www.cnblogs.com/ZhengLijie/p/12508751.html