【Leetcode解題】383. Ransom Note
題目
- 題目連結
- 目標函式 :
canConstruct(ransomNote, magazine)- Input :
ransomNote: str、magazine: str - Output :
bool
- Input :
解題概念
- 題意 : 給定兩個字串
ransomNote和magazine,如果ransomNote可以使用magazine中的字母去構造則回傳true,否則回傳false magazine中的每個字母只能在ransomNote中使用一次
我的寫法
- 想法 :
- 將
ransomNote和magazine轉為 list 的型態 - 對
ransomNote中每個字元做 for loop:- 若該字元出現在
magazine中,則將該字元從magazine中刪除 - 若否,則直接回傳
false
- 若該字元出現在
- 將
- 程式碼 :
1
2
3
4
5
6
7
8
9
10
11def canConstruct(self, ransomNote, magazine):
r = list(ransomNote)
m = list(magazine)
for c in r:
if c not in m:
return False
else:
m.remove(c)
return True - 成效 :
- Time Complexity : $\color{DB4D6D}{O(n)}$
- Runtime: 41 ms (faster than 82.62%)
- Memory Usage: 13.7 MB (more than 29.5%)
解答 or 其他優秀寫法
- 想法 :
- 改使用 26 格的陣列去儲存
magazine出現字母的各自次數 - 再逐一確認
ransomNote每個字元的出現次數是否合理
- 改使用 26 格的陣列去儲存
- 程式碼 :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19def canConstruct(self, ransomNote, magazine):
if len(ransomNote) > len(magazine):
return False
hashmap = dict()
for m in magazine:
if m in hashmap:
hashmap[m] += 1
else:
hashmap[m] = 1
=
for r in ransomNote:
if (not r in hashmap) or (hashmap[r] == 0):
return False
else:
hashmap[r] -= 1
return True - 成效 :
- Time Complexity : $\color{DB4D6D}{O(n)}$
- Runtime: 58 ms (faster than 51.7%)
- Memory Usage: 13.4 MB (more than 82.64%)
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Robin's Tech Blog!


