天天看點

「寶石與石頭」leetcode刷題 | 000

一直覺得自己的程式設計能力不怎麼好,于是想到了在Leecode上刷題的這個想法。就先從最基礎的開始吧。如果你有更好的解答方法,歡迎與我交流。

題目:

給定字元串J代表石頭中寶石的類型,和字元串S代表你擁有的石頭。S中每個字元代表了一種你擁有的石頭的類型,你想知道你擁有的石頭中有多少是寶石。

J中的字母不重複,J和S中的所有字元都是字母。字母區分大小寫,是以"a"和"A"是不同類型的石頭。

示例 1: 輸入:

J = "aA", S = "aAAbbbb"

輸出:

3

示例 2:

J = "z", S = "ZZ"

注意:

S 和 J 最多含有50個字母。

J 中的字元不重複。

解答:

看到這個題目,我第一反應是用兩層循環周遊,外層周遊S,内層周遊J。因為J中元素不重複,放在内層,這樣外層S中的元素逐一與S比較,相等計數就加一,然後傳回計數結果。說幹就幹:

```

class Solution(object):

def numJewelsInStones(self, J, S):

"""

        :type J: str

        :type S: str

        :rtype: int

        """

count =0

for s in S:

    for j in J:

        if s == j:

            count +=1

return(count)

執行之後,用時44s,這個成績在大家送出的代碼中排名如何呢?

「寶石與石頭」leetcode刷題 | 000

戰勝93.68%的python使用者,一定還有更加優秀的代碼,咱們一睹為快:

網友答案一:

for c in S:

    if c inJ: 

        count +=1

return count

這個是執行時間24s的例子,可以看到,隻用了一層循環,也是可以得到答案,跟我們的思路一樣。

還有跟我們思路不一樣的:

網友答案二

return sum([i in J for i in S])

看一下,這個是說有一個元素「i」同時在J和S中,之後再統計它的數量,這個也是可以得到答案。用時32s。

當然這個題比較簡單,相信你也能解答出來,簡單的問題尋求最優解才是我們的目的。希望跟你一起進步。