【刷题打卡】771. 宝石与石头

195 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

一、题目描述:

771. 宝石与石头

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

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

 

示例 1:

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

示例 2:

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

提示:

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

二、思路分析:

最简单的思路,遍历石头,检查石头是不是宝石。 宝石存成char[],石头存成List,以便把已经判断为宝石的石头从石头中拿出,减少循环比较的次数。 同时别忘了在拿出宝石的同时下标前移一位。

三、AC 代码:

    public int NumJewelsInStones(string J, string S) {
        char[] charJ = J.ToCharArray();
        List<char> charS = S.ToList<char>();
        int result = 0;
        for (int i = 0; i < charJ.Count(); i++)
        {
            for (int j = 0; j < charS.Count(); j++)
            {
                if (charJ[i] == charS[j])
                {
                    result++;
                    charS.Remove(charS[j]);
                    j--;
                }
            }
        }
        return result;
    }

四、总结:

哈希法更优其实。

范文参考:

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

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