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: ["Shogun", "Tapioca Express", "Burger King", "KFC"] ["Piatti", "The Grill at Torrey Pines", "Hungry Hunter Steakhouse", "Shogun"] Output: ["Shogun"] Explanation: The only restaurant they both like is "Shogun". Example 2: Input: ["Shogun", "Tapioca Express", "Burger King", "KFC"] ["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). Note: The length of both lists will be in the range of [1, 1000]. The length of strings in both lists will be in the range of [1, 30]. The index is starting from 0 to the list length minus 1. No duplicates in both lists.
public class Solution {
public string[] FindRestaurant(string[] list1, string[] list2) {
var map1 = new Dictionary<string,int>();
var map2 = new Dictionary<string,int>();
for(int i=0;i<list1.Length;i++){
map1.Add(list1[i],i);
}
for(int i=0;i<list2.Length;i++){
map2.Add(list2[i],i);
}
int min = int.MaxValue;
var result = new List<string>();
foreach(var item in map1){
if(map2.ContainsKey(item.Key)){
var sum = item.Value+map2[item.Key];
if(sum<min){
min = sum;
result.Clear();
result.Add(item.Key);
}
else if(sum==min){
result.Add(item.Key);
}
}
}
return result.ToArray();
}
}
Time Complexity: O(n)
Space Complexity: O(n)


