「这是我参与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
jewels
和stones
仅由英文字母组成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)