771.宝石与石头

  1. 771.宝石与石头
    1. 771.1 题目
    2. 771.2 题解
      1. 使用HashSet遍历统计
      2. 使用LINQ查询
    3. 771.3 代码
    4. 771.4 运行结果

771.宝石与石头


771.1 题目

给你一个字符串 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 中的所有字符都是唯一的

771.2 题解

使用HashSet遍历统计

// 方法一:使用HashSet遍历统计
// 遍历 jewels 构建一个宝石的哈希集合,然后遍历 stones 统计在哈希集合中的宝石数量
static int CountJewels1(string jewels, string stones)
{
    HashSet<char> jewelSet = new HashSet<char>(jewels);
    int count = 0;

    foreach (char stone in stones)
    {
        if (jewelSet.Contains(stone))
        {
            count++;
        }
    }

    return count;
}

使用LINQ查询

// 方法二:使用LINQ查询
// 使用 LINQ 表达式查询 stones 中包含的宝石数量
static int CountJewels2(string jewels, string stones)
{
    return stones.Count(jewels.Contains);
}

771.3 代码

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        #region 题目

        // 给你一个字符串 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 中的所有字符都是唯一的

        #endregion

        #region 测试

        // 示例 1
        string jewels1 = "aA";
        string stones1 = "aAAbbbb";
        int result1 = CountJewels1(jewels1, stones1);
        Console.WriteLine($"示例1 方法1 输出:{result1}");
        int result1_2 = CountJewels2(jewels1, stones1);
        Console.WriteLine($"示例1 方法2 输出:{result1_2}");

        // 示例 2
        string jewels2 = "z";
        string stones2 = "ZZ";
        int result2 = CountJewels1(jewels2, stones2);
        Console.WriteLine($"示例2 方法1 输出:{result2}");
        int result2_2 = CountJewels2(jewels2, stones2);
        Console.WriteLine($"示例2 方法2 输出:{result2_2}");

        #endregion
    }

    #region 答案

    // 方法一:使用HashSet遍历统计
    // 遍历 jewels 构建一个宝石的哈希集合,然后遍历 stones 统计在哈希集合中的宝石数量
    static int CountJewels1(string jewels, string stones)
    {
        HashSet<char> jewelSet = new HashSet<char>(jewels);
        int count = 0;

        foreach (char stone in stones)
        {
            if (jewelSet.Contains(stone))
            {
                count++;
            }
        }

        return count;
    }

    // 方法二:使用LINQ查询
    // 使用 LINQ 表达式查询 stones 中包含的宝石数量
    static int CountJewels2(string jewels, string stones)
    {
        return stones.Count(jewels.Contains);
    }

    #endregion
}

771.4 运行结果

示例1 方法1 输出:3
示例1 方法2 输出:3
示例2 方法1 输出:0
示例2 方法2 输出:0


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏