1.原題:
https://leetcode.com/problems/jewels-and-stones/
あなたは、文字列を与えられている J
宝石です石の種類を表すが、そして S
あなたが持っている石を表します。各文字は、 S
あなたが持っている石の種類です。あなたはまた、宝石どのようにあなたが持っている石の多くを知りたいです。
内の文字 J
明確な保証されている、とのすべての文字 J
とは S
文字です。文字は大文字と小文字が区別されますので、 "a"
より石の異なるタイプと考えられています "A"
。
言い換え翻訳:Jが文字列である、それはあなたが望むダイヤモンドの種類と考えられている人たちを表して。例えば、J =広告が、それは、dは、あなたが宝石をする2個のダイヤモンドとみなすことができることを意味します。
そして、Sが文字列である、それはあなたのダイヤモンドのすべてを表しています。例えばS = aAfddためには、ダイヤモンド(敏感音符の場合)、およびDの4種類の合計は、2個のそのようなダイヤモンドを有することを意味します。
あなたは、いくつかのSの内部の存在下で、いくつかのダイヤモンドの合計をしたいことを知っているためにプログラムを記述する必要があります。
2.問題解決のアイデア:
この質問は非常に多くのアイデアです。理論的には、あなたは離れて取得するforループを書くために基本的には脳、直接スキャンすることもしませんしたいのですが、その後、コードは非常に遅く、メモリを食べているので、この質問です。
だから、ほとんどの人々の関心は、時間と空間の複雑さを軽減する方法に焦点を当てています。
アイデアの数々の種類がある、ディスカッションエリアを見てみることをお勧めしますが、私は個人的にここに方法を選択するようなものです。
。知識の必要性:
時間の複雑性を最小限にするためにleetcodeギャングスターはunorderセット(ハッシュテーブルに基づいて、このデータ構造)を使用し、このデータ構造が簡単にビューにある、追加、および削除が、よりそのため、障害のメモリを取る、しかし、我々考慮目的は、時代の一種なので、問題はないの必要はありません。
参考読書:http://www.cplusplus.com/reference/unordered_set/unordered_set/
。Bの問題解決のアイデア:
クラス解決{
パブリック:
int型numJewelsInStones(ストリングJ、ストリングS){
int型RES = 0。
unordered_set <CHAR> setJ(J.begin()、J.end())。
以下のための(文字S:S)
の場合(setJ.count(S))
解像度++;
解像度を返します。
}
}。
コアはunorderセットです。私たちは、Jの文字を格納するためにunorderセットを作成します(J主な役割は、クエリとしてあります)
加えRES内部に見つかった場合、次にJ型内部ループに対して比較することである代表的な種チャーS Sで行く、最終的な出力は、実際には、最も適切なデータ構造を見つけることです。