771. 宝石与石头

2019-06-18

本文总阅读量:

题目链接

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 中的字符不重复。

解题方案

思路

  • 标签:字符串
  • 首先对J进行遍历,将字符分别存到HashSet中,以便之后遍历S的时候查找
  • 遍历S,并将每个字符与HashSet中的进行比对,如果存在,则结果ans++,遍历结束,返回ans
  • 时间复杂度:O(m+n),m为J的长度,n为S的长度

代码

  • Java版本
class Solution {
    public int numJewelsInStones(String J, String S) {
        Set<Character> set = new HashSet<>();
        for(int i = 0; i < J.length(); i++) {
            set.add(J.charAt(i));
        }
        int ans = 0;
        for(int i = 0; i < S.length(); i++) {
            if(set.contains(S.charAt(i))){
                ans++;
            }
        }
        return ans;
    }
}
  • JavaScript版本
/**
 * @param {string} J
 * @param {string} S
 * @return {number}
 */
var numJewelsInStones = function(J, S) {
    const set = new Set();
    for(const s of J) {
        set.add(s);
    }
    let ans = 0;
    for(const s of S) {
        if(set.has(s)){
            ans++;
        }
    }
    return ans;
};

画解

frame_00001 frame_00002 frame_00003 frame_00004 frame_00005

后台回复「算法」,加入天天算法群 觉得算法直击灵魂,欢迎点击在看转发