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] and list2[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())]

Random Note


Substring a String

  • string[start:end:step]
  • from first string[2:6]
  • last char string[-1]
  • last char by index string[-1]
  • from last string[-5:]
  • first to last string[1:-4]