LeetCode.771 宝石与石头

184 阅读1分钟

「这是我参与2022首次更文挑战的第38天,活动详情查看:2022首次更文挑战」。

题目描述:

771. 宝石与石头 - 力扣(LeetCode) (leetcode-cn.com)

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

字母区分大小写,因此 "a""A" 是不同类型的石头。

示例一

输入: jewels = "aA", stones = "aAAbbbb"
输出: 3

示例二

输入: jewels = "z", stones = "ZZ"
输出: 0

提示:

  • 1 <= jewels.length, stones.length <= 50
  • jewelsstones 仅由英文字母组成
  • jewels 中的所有字符都是 唯一的

思路分析

暴力

题目很简单,就是找到宝石在石头中的总数,换句话说就是字符串的个数,我们暴力遍历统计即可。

该解法比较简单,就不贴代码了。

哈希表

想到统计数目,哈希表也算是我们想到的常用的方法。

我们先用一个Set集合来存储我们的钻石,然后我们遍历石头,依次看石头中有没有钻石,有的话我们的答案就+1。

这里用set是因为我们要去除重复的钻石。

AC代码

class Solution {
    fun numJewelsInStones(jewels: String, stones: String): Int {
        val jewelsSet = mutableSetOf<Char>()
        jewels.forEach { c ->
            jewelsSet.add(c)

        }
        var ans = 0
        stones.forEach { c ->
            if(jewelsSet.contains(c)) {
                ans++
            }
        }
        return ans
    }
}

总结

逛了一圈题解,还有正则和位运算的解法,虽然可能不是本题的本意,但是解法还是蛮新奇的。

参考

宝石与石头 - 宝石与石头 - 力扣(LeetCode) (leetcode-cn.com)

画解算法:771. 宝石与石头 - 宝石与石头 - 力扣(LeetCode) (leetcode-cn.com)

用时击败 99.73% - 宝石与石头 - 力扣(LeetCode) (leetcode-cn.com)

【宝石与石头】【C语言详解】【超级详细】 - 宝石与石头 - 力扣(LeetCode) (leetcode-cn.com)