Featured image of post 771. 宝石与石头

771. 宝石与石头

题目描述

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

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

示例 1:

  • 输入:jewels = “aA”, stones = “aAAbbbb”
  • 输出:3

示例 2:

  • 输入:jewels = “z”, stones = “ZZ”
  • 输出:0

提示:

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

解法一:哈希表

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
func numJewelsInStones(jewels string, stones string) int {
    s := make(map[rune]struct{})
    for _, jewel := range jewels {
        s[jewel] = struct{}{}
    }
    ans := 0
    for _, stone := range stones {
        if _, has := s[stone]; has {
            ans++
        }
    }
    return ans
}

解法二:位运算

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
func numJewelsInStones(jewels string, stones string) int {
    var s int64
    for _, jewel := range jewels {
        s |= 1 << (jewel & 63)
    }
    ans := 0
    for _, stone := range stones {
        if s&(1<<(stone&63)) != 0 {
            ans++
        }
    }
    return ans
}
comments powered by Disqus
Built with Hugo
主题 StackJimmy 设计