https://leetcode.com/problems/jewels-and-stones/數據結構
You're given strings J
representing the types of stones that are jewels, and S
representing the stones you have. Each character in S
is a type of stone you have. You want to know how many of the stones you have are also jewels.ide
The letters in J
are guaranteed distinct, and all characters in J
and S
are letters. Letters are case sensitive, so "a"
is considered a different type of stone from "A"
.oop
意譯翻譯:J是一個string,它表明的是那些被認爲是你想要的的鑽石種類。好比J=ad,那說明a和d這兩種鑽石能夠被視爲你想要的珠寶。spa
而S也是一個string,它表明的是你全部的鑽石。好比S = aAfdd,那說明一共有4種不一樣的鑽石(注意這裏區分大小寫),而d這種鑽石有兩個。翻譯
你須要寫一個程序來得知你想要的這種幾種鑽石一共有幾個存在在這個S裏面。code
這道題的思路很是多。由於這道題理論上講,想要作出來基本上很無腦,直接寫一個for loop掃描就完事了,可是那樣的話代碼很慢還吃內存。排序
所以大多數人的重點是關注如何下降時間和空間複雜度上。內存
建議去看看討論區,裏面有無數種思路,這裏只選擇我我的來講喜歡的方法。leetcode
爲了最小化時間複雜度,leetcode大佬使用了unorder set(這個數據結構基於哈希表),這種數據結構就是方便查閱,增添和刪除,可是由於無序因此更佔用內存,不過考慮到咱們此次的目的不須要排序,因此沒問題。get
參考閱讀:http://www.cplusplus.com/reference/unordered_set/unordered_set/
class Solution {
public:
int numJewelsInStones(string J, string S) {
int res = 0;
unordered_set<char> setJ(J.begin(), J.end());
for (char s : S)
if (setJ.count(s))
res++;
return res;
}
};
核心就是unorder set.咱們建立一個unorder set來儲存J的char(由於J主要做用是查詢)
而後用char s 去一個個表明S裏面的種類的for loop來對比J裏面的種類,若是找到就加進res裏面,最後輸出,其實就是要找到最合適的數據結構。