美文网首页
LeetCode刷题 771 宝石与石头

LeetCode刷题 771 宝石与石头

作者: 江湖路远_各自珍重 | 来源:发表于2019-02-08 22:32 被阅读2次

LeetCode刷题 771 宝石与石头

题目

给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头。 S 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。

J 中的字母不重复,JS中的所有字符都是字母。字母区分大小写,因此"a""A"是不同类型的石头。

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

思考

这里我一上来就最直接的想到了暴力的双循环,但是考虑到效率问题,肯定不可能这么简单,但后看题目下的提示哈希表。就想到了还是建立哈希表,然后在哈希表里查找,时间复杂度O(1)。还是用空间换取时间。

解题思路

关键在第一步,建立哈希表。然后遍历哈希表,然后得出结果。

Python实现

使用Python自带的字典

class Solution:
    def numJewelsInStones(self, J, S):
        """
        :type J: str

        :type S: str

        :rtype: int

        """
        # create a dictionary
        dict = {}
        # create a hash table
        for c in J:
            dict[c] = 0
        # search
        for c in S:
            if c in dict:
                dict[c] += 1

        sum = 0
        for value in dict.values():
            sum += value
        return sum

在LeetCode上跑了48ms

C++实现

class Solution 
{
public:
    int numJewelsInStones(string J, string S) 
    {
        // create a dictionary
        std::unordered_map<char, int> dict;
        // create a hash table
        for(int i = 0; i < J.size(); ++i)
        {
            dict.insert(std::pair(J[i], 0));
        }
        // search
        for(int i = 0; i < S.size(); ++i)
        {
            auto it = dict.find(S[i]);
            if(it != dict.end())
            {
                ++((*it).second);
            }
        }
        int sum = 0;
        for(auto& item : dict)
        {
            sum += item.second;
        }
        return sum;
    }
};

在LeetCode上跑了4ms

相关文章

  • LeetCode刷题 771 宝石与石头

    LeetCode刷题 771 宝石与石头 题目 给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头。...

  • leetcode刷题-771. 宝石与石头

    题目: 给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头。 S 中每个字符代表了一种你拥有的石头的...

  • 一起学算法-771. 宝石与石头

    一、题目 LeetCode-771. 宝石与石头地址:https://leetcode-cn.com/proble...

  • Leetcode-771 宝石与石头

    771. 宝石与石头[https://leetcode-cn.com/problems/jewels-and-st...

  • 【LeetCode】771. 宝石与石头

    LeetCode算法题目 题目 给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头。 S 中每个字符...

  • leetcode 771. 宝石与石头

    771. 宝石与石头 题目 题目理解 第一个版本 根据题目要求 就遍历字符串j的每个字符,然后统计 s中出现次数T...

  • LeetCode-771-宝石与石头

    解题思路 J不重复,则令J为字典; 遍历S,若S[i]在J中则结果+1。 Python3代码

  • LeetCode 771. 宝石与石头

    771. 宝石与石头 给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头。 S 中每个字符代表了一种...

  • LeetCode 771.宝石与石头

    给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头。 S 中每个字符代表了一种你拥有的石头的类型,你...

  • LeetCode 771. 宝石与石头

    题目 给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头。 S 中每个字符代表了一种你拥有的石头的类...

网友评论

      本文标题:LeetCode刷题 771 宝石与石头

      本文链接:https://www.haomeiwen.com/subject/ypoosqtx.html