← 筆記

[LeetCode刷題筆記] 771 - Jewels and Stones

題目描述:

You’re given strings jewels representing the types of stones that are jewels, and stones representing the stones you have. Each character in stones is a type of stone you have. You want to know how many of the stones you have are also jewels.

Letters are case sensitive, so "a" is considered a different type of stone from "A".

Example 1:

Input: jewels = "aA", stones = "aAAbbbb"
Output: 3

Example 2:

Input: jewels = "z", stones = "ZZ"
Output: 0

Constraints:

  • 1 <= jewels.length, stones.length <= 50
  • jewels and stones consist of only English letters.
  • All the characters of jewels are unique.

一刷題解(HashSet):

這題給了我們兩個數組,一個是「石頭」數組,一個是「寶石」數組。「石頭」數組給了我們一系列的大/小寫的英文字母,這些英文字母代表著一些石頭;「寶石」數組則給了一些不重複的大/小寫英文字母,在「寶石」數組出現了的字母有可能會與「石頭」數組中出現的字母重複,重複了的字母代表著「這些石頭是寶石」。

因此我們只要把寶石數組的元素加到一個HashSet中,再遍歷石頭數組,如果寶石HashSet中包含了石頭數組的元素,寶石計數遞增。

public class Solution {
    public int NumJewelsInStones(string jewels, string stones) {   
        
        if(jewels.Length == 0 || stones.Length == 0) { return 0; }

        HashSet<char> jewelHash = jewels.ToHashSet<char>();

        int jewelCnt = 0;
        foreach (char s in stones)
        {
            if (jewelHash.Contains(s))
            {
                jewelCnt++;
            }
        }

        return jewelCnt;
    }
}