寶石與石頭/桶排序

寶石與石頭

給定字符串J 代表石頭中寶石的類型,和字符串 S代表你擁有的石頭。 S 中每個字符代表了一種你擁有的石頭的類型,你想知道你擁有的石頭中有多少是寶石。

J 中的字母不重複,J 和 S中的所有字符都是字母。字母區分大小寫,因此"a"和"A"是不同類型的石頭。

示例 1:

輸入: J = "aA", S = "aAAbbbb"
輸出: 3
示例 2:

輸入: J = "z", S = "ZZ"
輸出: 0
注意:

S 和 J 最多含有50個字母。
 J 中的字符不重複。

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/jewels-and-stones

正常的思維應該是一個n*m的遍歷來得出結果

class Solution {
public:
    int numJewelsInStones(string J, string S) {
        int a=J.length(),temp=0,b=S.length();
        for(int i=0;i<a;i++){
            for(int j=0;j<b;j++){
                if(J[i]==S[j]){
                    temp++;
                }
            }
        }
        return temp;
    }
};

而我在這裏利用了桶排序的思想將時間複雜度降到了n+m(空間換時間)

class Solution {
public:
    int numJewelsInStones(string J, string S) {
        int a=J.length(),temp=0,b=S.length(),A[150]={0};
        for(int j=0;j<b;j++){
                A[S[j]-'A']++;
        }
        for(int j=0;j<a;j++){
           temp+=A[J[j]-'A'];
        }
        
        return temp;
    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章