LeetCode 771 寶石與石頭

2021-10-18 18:01:10 字數 2497 閱讀 4462

題目要求:給定字串j 代表石頭中寶石的型別,和字串 s代表你擁有的石頭。 s 中每個字元代表了一種你擁有的石頭的型別,你想知道你擁有的石頭中有多少是寶石。

j 中的字母不重複,j 和 s中的所有字元都是字母。字母區分大小寫,因此"a"和"a"是不同型別的石頭。

示例 1:

輸入: j = 「aa」, s = 「aaabbbb」

輸出: 3

示例 2:

輸入: j = 「z」, s = 「zz」

輸出: 0

注意:s 和 j 最多含有50個字母。

j 中的字元不重複。

解法一 分析:

遍歷字串 s,對於 s 中的每個字元,遍歷一次字串 j,如果其和 j中的某乙個字元相同,則是寶石。

複雜度分析

時間複雜度:o(mn),其中 m 是字串 j 的長度,n 是字串 s 的長度。遍歷字串 s 的時間複雜度是 o(n),對於 s 中的每個字元,需要遍歷字串 j 判斷是否是寶石,時間複雜度是 o(m),因此總時間複雜度是 o(mn)。

空間複雜度:o(1)。只需要維護常量的額外空間。

**如下:

class

solution}}

return jewelscount;}}

;

jewelslength =j.

length

()

c/c++中 strlen(str)和str.length()和str.size()都可以求字串長度。

其中str.length()和str.size()是用於求string類物件的成員函式

strlen(str)是用於求字元陣列的長度,其引數是char*。

第二天自己敲啦!發現小毛病如下:

1、

jewelslength =j.

length()

;

這裡理所當然認為是 j ,再看**發現題目定義的並不是 j 而是 jewels ,寫題目注意上下一致不要想當然呀!

2、

for

(int i =

0; i < stoneslength; i++

)

這裡忘記對 i 進行定義,即使只在迴圈條件裡出現也不要忘記定義呀!

而且!!!中間是分號呀,又是被菜哭的一天。不是分號的話會被認為是重複再定義

3、

char stone =

s[i]

;

這裡也要記得定義一下stone。(頭大,老是忘記定義一些變數,而且它是char型別!)

而且 !!!這裡表示字串中的乙個字元時,中間不加點,是長 s[ i ] 這樣,瞅了好久…

4、

return jewelscount;
最後要記得有返回值呀!!(報錯了才發現,最後沒寫這一行…)

好啦,最後終於成功了~(附上自己敲的**)

class

solution}}

return jewelscount;}}

;

解法二 雜湊集合 分析

方法一中,對於字串 s 中的每個字元,都需要遍歷一次字串 j,導致時間複雜度較高。如果使用雜湊集合儲存字串 j 中的寶石,則可以降低判斷的時間複雜度。

遍歷字串 j,使用雜湊集合儲存其中的字元,然後遍歷字串 s,對於其中的每個字元,如果其在雜湊集合中,則是寶石。

複雜度分析

時間複雜度:o(m+n),其中 m 是字串 j 的長度,n 是字串 s 的長度。遍歷字串 j 將其中的字元儲存到雜湊集合中,時間複雜度是 o(m),然後遍歷字串 s,對於 s 中的每個字元在 o(1) 的時間內判斷當前字元是否是寶石,時間複雜度是 o(n),因此總時間複雜度是 o(m+n)。

空間複雜度:o(m),其中 m 是字串 j 的長度。使用雜湊集合儲存字串 j 中的字元。

**如下:

class

solution

for(int i =

0; i < stoneslength; i++)}

return jewelscount;}}

;

jewelsset.

insert

(jewel)

;

insert() 函式有以下三種用法:

1、在指定位置loc前插入值為val的元素,返回指向這個元素的迭代器

2、在指定位置loc前插入num個值為val的元素

3、在指定位置loc前插入區間[start, end)的所有元素

unordered_set jewelsset;
c++**,用stl中的unordered_set儲存一下j中資料

(第二天每日一題,拿到題目還是不會寫,感覺菜菜的,啥時候我也能動手敲**如有神呀!好了,真的困,午安吧~)

Leetcode 771 寶石與石頭

給定字串j代表你現在擁有代表寶石的型別,和字串s代表你擁有的石頭。s中每個字元代表了一種你擁有的石頭的型別,你想知道你擁有的石頭中有多少是寶石。j中的字母不重複,j和s中的所有字元都是字母。字母區分大小寫,因此 a 和 a 是不同型別的石頭。def numjewelsinstones j,s i 0...

Leetcode 771 寶石與石頭

給定字串j代表石頭中寶石的型別,和字串s代表你擁有的石頭。s中每個字元代表了一種你擁有的石頭的型別,你想知道你擁有的石頭中有多少是寶石。j中的字母不重複,j和s中的所有字元都是字母。字母區分大小寫,因此 a 和 a 是不同型別的石頭。示例 1 輸入 j aa s aaabbbb 輸出 3示例 2 輸...

LeetCode 771 寶石與石頭

給定字串j代表石頭中寶石的型別,和字串s代表你擁有的石頭。s中每個字元代表了一種你擁有的石頭的型別,你想知道你擁有的石頭中有多少是寶石。j中的字母不重複,j和s中的所有字元都是字母。字母區分大小寫,因此 a 和 a 是不同型別的石頭。示例 1 輸入 j aa s aaabbbb 輸出 3 示例 2 ...