题目
假设 Andy 和 Doris 想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示。
你需要帮助他们用最少的索引和找出他们共同喜爱的餐厅。 如果答案不止一个,则输出所有答案并且不考虑顺序。 你可以假设答案总是存在。
思路
- 使用字典记录{共同喜欢的商店:索引和},返回索引和并列最小的商店名
1. set(list1) & set(list2)
- 执行
set(list1)
得到{'Shogun', 'Tapioca Express', 'Burger King', 'KFC'}
。 - 执行
set(list2)
得到{'Piatti', 'The Grill at Torrey Pines', 'Hungry Hunter Steakhouse', 'Shogun'}
。 - 它们的交集
set(list1) & set(list2)
为{'Shogun'}
。
2. {x: list1.index(x) + list2.index(x) for x in set(list1) & set(list2)}
- 对于
x = 'Shogun'
:list1.index('Shogun')
的值为0
。list2.index('Shogun')
的值为3
。- 所以字典
d
为{'Shogun': 3}
。
3. min(d.values())
- 对于字典
d = {'Shogun': 3}
,min(d.values())
的值为3
。
4. [x for x in d if d[x] == min(d.values())]
- 因为
d['Shogun'] == 3
(3
是min(d.values())
),所以结果列表为['Shogun']
。
再以list1 = ["a", "b", "c", "d", "e"]
和list2 = ["c", "e", "f", "g"]
为例
代码
class Solution(object):
def findRestaurant(self, list1, list2):
"""
:type list1: List[str]
:type list2: List[str]
:rtype: List[str]
"""
d = {x: list1.index(x) + list2.index(x) for x in set(list1) & set(list2)}
return [x for x in d if d[x] == min(d.values())]