Suppose Andy and Doris want to choose a restaurant for dinner, and they both have a list of favorite restaurants represented by strings.
You need to help them find out their common interest with the least list index sum. If there is a choice tie between answers, output all of them with no order requirement. You could assume there always exists an answer.
Example 1:
Input: list1 = ["Shogun","Tapioca Express","Burger King","KFC"], list2 = ["Piatti","The Grill at Torrey Pines","Hungry Hunter Steakhouse","Shogun"] Output: ["Shogun"] Explanation: The only restaurant they both like is "Shogun".
Example 2:
Input: list1 = ["Shogun","Tapioca Express","Burger King","KFC"], list2 = ["KFC","Shogun","Burger King"] Output: ["Shogun"] Explanation: The restaurant they both like and have the least index sum is "Shogun" with index sum 1 (0+1).
Constraints:
1 <= list1.length, list2.length <= 1000
1 <= list1[i].length, list2[i].length <= 30
list1[i]
andlist2[i]
consist of spaces' '
and English letters.- All the stings of
list1
are unique. - All the stings of
list2
are unique.
import sys
class Solution:
def findRestaurant(self, list1: List[str], list2: List[str]) -> List[str]:
s1 = {k: v for v, k in enumerate(list1)}
min_sum = 99999
all_matched = True
answers = {}
for i, l in enumerate(list2):
if l in s1:
if i+s1[l] == min_sum:
answers[min_sum].append(l)
elif i+s1[l] < min_sum:
min_sum = i+s1[l]
answers[min_sum] = [l]
else:
all_matched = False
return answers[min(answers.keys())]