LeetCode 771宝石と石HERODINGのLeetCodeの道


与えられた文字列Jは石の中の宝石のタイプを表し、文字列Sはあなたが持っている石を表します.Sの各文字はあなたが持っている石のタイプを表しています.あなたが持っている石の中に宝石がどれだけあるか知りたいです.
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;
    }
};