005 匿名信
题目描述
电视剧《分界线》里面有一个片段,男主为了向警察透露案件细节,且不暴露自己,于是将报刊上的字剪下来,剪拼成一封匿名信。现在有一名举报人,希望借鉴这种方式,使用英文报刊完成举报操作。但为了增加文章的混淆度,只需满足每个单词中字母数量一致即可,不关注每个字母的顺序。
解释: 单词on允许通过单词no进行替代。
newspaper 变量表示报纸内容,anonymousLetter变量表示匿名信内容,求报纸内容是否可以拼成匿名信。
输入描述
- 第一行输入newspaper内容,包含1-N个字符串,用空格分开。
- 第二行输入anonymousLetter内容,包含1-N个字符串,用空格分开。
注:
- newspaper和anonymousLetter的字符串由小写英文字母组成,且每个字母只能使用一次
- newspaper内容中的每个字符串的字母顺序可以任意调整,但必须保证字符串的完整性(每个字符串不能有多余字母)1 < N < 100,1 <= newspaper.lengh, anonymousLetter.length <= 10^4
输出描述
如果报纸内容可以拼成匿名信,返回true,否则返回false。
示例描述
示例一
输入:
abcd
ab
输出:
true
示例二
输入:
ab ef
aef
输出:
false
示例三
输入:
ab bcd ef
cbd fe
输出:
true
示例四
输入:
ab bcd ef
cb fe
输出:
false
解题思路
使用sorted对报纸和匿名信中的每个单词进行排序。
遍历匿名信中的所有单词,在报纸中寻找单词,如果没有找到,就返回False,全部都找到了,最后返回True。
解题代码
def solve_method(newspaper, anonymousLetter):
newspaper_list = [sorted(l) for l in newspaper]
anonymous_letter_list = [sorted(l) for l in anonymousLetter]
for letter in anonymous_letter_list:
if letter not in newspaper_list:
return False
return True
if __name__ == '__main__':
newspaper = ["ab", "cd"]
anonymousLetter = ["ab"]
assert solve_method(newspaper, anonymousLetter) is True
newspaper = ["ab", "ef"]
anonymousLetter = ["aef"]
assert solve_method(newspaper, anonymousLetter) is False
newspaper = ["ab", "bcd", "ef"]
anonymousLetter = ["cbd", "fe"]
assert solve_method(newspaper, anonymousLetter) is True
newspaper = ["ab", "bcd", "ef"]
anonymousLetter = ["cb", "fe"]
assert solve_method(newspaper, anonymousLetter) is False