美文网首页一起学算法
一起学算法-771. 宝石与石头

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

作者: 小杨同学97 | 来源:发表于2021-05-13 22:40 被阅读0次

一、题目

LeetCode-771. 宝石与石头
地址:https://leetcode-cn.com/problems/jewels-and-stones/

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

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

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

示例 2:
输入: J = "z", S = "ZZ"
输出: 0

注意:
S 和 J 最多含有50个字母。
 J 中的字符不重复。

二、解题思路

方法一:

遍历字符串stones,对于stones 中的每个字符,遍历一次字符串jewels,如果与其相同就是宝石。

/**
 * @param {string} jewels
 * @param {string} stones
 * @return {number}
 */
var numJewelsInStones = function(jewels, stones) {
    let n = 0;
    for(let i = 0;i < stones.length;++i){
        for(let j = 0;j < jewels.length;++j){
            if(stones[i] == jewels[j]){
                ++n;
            }
        }
    }
    return n;
};

方法二:

使用哈希集合存储jewels中的字符,然后遍历stones,如果其在哈希集合中就是宝石。

/**
 * @param {string} jewels
 * @param {string} stones
 * @return {number}
 */
var numJewelsInStones = function(jewels, stones) {
    let n = 0;
    const set = new Set(jewels.split(''));
    
    for(let i = 0;i < stones.length;++i){
        if(set.has(stones[i])){
            ++n;
        }
    }
    return n;
};

三、其他语言实现过程

c++

class Solution {
public:
    int numJewelsInStones(string jewels, string stones) {
        int n = 0;
        unordered_set<char> jewelsSet;
        int jewelsLength = jewels.length(), stonesLength = stones.length();
        for (int i = 0; i < jewelsLength; i++) {
            jewelsSet.insert(jewels[i]);
        }
        for (int i = 0; i < stonesLength; i++) {
            n += jewelsSet.count(stones[i]);
        }
        return n;
    }
};

PHP

class Solution {

    /**
     * @param String $jewels
     * @param String $stones
     * @return Integer
     */
    function numJewelsInStones($jewels, $stones) {
        $n = 0;
        $jewels = str_split($jewels);
        $stones = str_split($stones);
        $map = [];
        foreach($jewels as $k => $v){
            $map[$v] = $k;
        }

        $len = count($stones);
        for($i = 0;$i < $len;++$i){
            if($map[$stones[$i]]){
                ++$n;
            }
        }
        return $n;
    }
}

四、小结

再次遇到用哈希集合解决的题目,对哈希集合也有了一定了解。与算法入门-1. 两数之和 - 简书 (jianshu.com)相似,哈希集合的使用使得两层循环分开进行,算法时间复杂度从O(mn)降到了O(m+n)。

分享不易,如果你觉得还有用就点个赞再走吧!

相关文章

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

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

  • Leetcode-771 宝石与石头

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

  • ARTS Week 05

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

  • 771. 宝石与石头

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

  • 771. 宝石与石头

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

  • 771.宝石与石头

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

  • 771.宝石与石头

    在leetcode上看到的一个新解法,感觉不错。采用了桶排序的思想,以及int与char转换的方式方法。

  • 771. 宝石与石头

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

  • 771. 宝石与石头

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

  • LeetCode 771. 宝石与石头

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

网友评论

    本文标题:一起学算法-771. 宝石与石头

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