为了不在赎金信中暴露字迹,从杂志上搜索各个需要的字母,组成单词来表达意思。
给你一个赎金信 (ransomNote) 字符串和一个杂志(magazine)字符串,判断 ransomNote 能不能由 magazines 里面的字符构成。
如果可以构成,返回 true ;否则返回 false 。
magazine 中的每个字符只能在 ransomNote 中使用一次。
这个……怎么说呢,我本来的想法就是,将他们做成列表,然后相同的顶掉,剩下的不同就返回true或false,接下来先上代码
ransomNote = "aa"
magazine = "aab"
magazine_list = []
ransomNote_list = []
bools = 0
for i in magazine:
magazine_list.append(i)
for j in ransomNote:
ransomNote_list.append(j)
for k in range(len(ransomNote_list)):
try:
if ransomNote_list[0] == magazine_list[magazine_list.index(ransomNote_list[0])]:
bools += 1
magazine_list.remove(magazine_list[magazine_list.index(ransomNote_list[0])])
ransomNote_list.remove(ransomNote_list[0])
else:
bools = 0
break
except:
bools = 0
break
print(bool(bools))
主要是我在力扣上面看到我的提交记录,速度极慢,使用内存极高,然后……我就emo了,然后我了解到,这个似乎要用到哈希算法,然后我放个哈希的简单点的答案
class Solution:
def canConstruct(self, ransomNote: str, magazine: str) -> bool:
arr = [0] * 26
for x in magazine:
arr[ord(x) - ord('a')] += 1
for x in ransomNote:
if arr[ord(x) - ord('a')] == 0:
return False
else:
arr[ord(x) - ord('a')] -= 1
return True
然后放个离谱过头的答案,虽然思路跟我是一样的,但是我只能感叹,这也太暴力了吧
class Solution(object):
def canConstruct(self, ransomNote, magazine):
"""
:type ransomNote: str
:type magazine: str
:rtype: bool
"""
a = list(ransomNote)
b = list(magazine)
try:
for i in a:
b.remove(i)
return True
except:
return False