一直覺得自己的程式設計能力不怎麼好,于是想到了在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,這個成績在大家送出的代碼中排名如何呢?

戰勝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。
當然這個題比較簡單,相信你也能解答出來,簡單的問題尋求最優解才是我們的目的。希望跟你一起進步。