LeetCode 771宝石と石HERODINGのLeetCodeの道
与えられた文字列Jは石の中の宝石のタイプを表し、文字列Sはあなたが持っている石を表します.Sの各文字はあなたが持っている石のタイプを表しています.あなたが持っている石の中に宝石がどれだけあるか知りたいです.
Jの中のアルファベットは重複せず、JとSの中のすべての文字はアルファベットです.アルファベットは大文字と小文字を区別するので、「a」と「A」は異なるタイプの石です.
例1:
入力:J=“aa”,S=“aabbbbb”出力:3
例2:
入力:J=“z”,S=“ZZ”出力:0
注意:
解題の構想:ついに1つの簡単な問題が待ち望んで、この問題も多種の解題の構想があって、1つは暴力の解読の方法で、直接遍歴して、時間の複雑度はO(mn)で、もう1つはSetを使って、Setは宝石のアルファベットを貯蔵することができて、それからcount関数で比較して、すぐに結果を出すことができて、コードは以下の通りです:
Setの使用方法
Jの中のアルファベットは重複せず、JとSの中のすべての文字はアルファベットです.アルファベットは大文字と小文字を区別するので、「a」と「A」は異なるタイプの石です.
例1:
入力:J=“aa”,S=“aabbbbb”出力:3
例2:
入力:J=“z”,S=“ZZ”出力:0
注意:
S J 50 。
J 。
解題の構想:ついに1つの簡単な問題が待ち望んで、この問題も多種の解題の構想があって、1つは暴力の解読の方法で、直接遍歴して、時間の複雑度はO(mn)で、もう1つはSetを使って、Setは宝石のアルファベットを貯蔵することができて、それからcount関数で比較して、すぐに結果を出すことができて、コードは以下の通りです:
class Solution {
public:
int numJewelsInStones(string J, string S) {
int count = 0;
int len1 = J.length();
int len2 = S.length();
for(int i = 0; i < len2; i ++){
char stone = S[i];
for(int j = 0; j < len1; j ++){
char jew = J[j];
if(stone == jew){
count ++;
}
}
}
return count;
}
};
Setの使用方法
class Solution {
public:
int numJewelsInStones(string J, string S) {
int count = 0;
unordered_set<char> jewSet;
int len1 = J.length();
int len2 = S.length();
for(int i = 0 ; i < len1; i ++){
char jewel = J[i];
jewSet.insert(jewel);
}
for(int i = 0; i < len2; i ++){
char stone = S[i];
if(jewSet.count(stone)){
count ++;
}
}
return count;
}
};