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).
输出两个字符串数组共有的字符串,要求索引之和最小
C++(92ms):
1 class Solution { 2 public: 3 vector<string> findRestaurant(vector<string>& list1, vector<string>& list2) { 4 vector<string> res ; 5 unordered_map<string,int> Map ; 6 int Min = INT_MAX ; 7 for(int i = 0 ; i < list1.size() ; i++){ 8 Map[list1[i]] = i ; 9 } 10 for(int i = 0 ; i < list2.size() ; i++){ 11 if (Map.count(list2[i])){ 12 if (Map[list2[i]] + i < Min ){ 13 Min = Map[list2[i]] + i ; 14 res.clear(); 15 res.push_back(list2[i]) ; 16 }else if(Map[list2[i]] + i == Min ){ 17 res.push_back(list2[i]) ; 18 } 19 } 20 } 21 return res ; 22 } 23 };
Java(29ms):
1 class Solution { 2 public String[] findRestaurant(String[] list1, String[] list2) { 3 HashMap<String,Integer> Map = new HashMap() ; 4 LinkedList<String> res = new LinkedList() ; 5 int Min = Integer.MAX_VALUE ; 6 for(int i = 0 ; i < list1.length ; i++){ 7 Map.put(list1[i] , i) ; 8 } 9 for(int i = 0 ; i < list2.length ; i++){ 10 if (Map.containsKey(list2[i])){ 11 if (Map.get(list2[i]) + i < Min){ 12 Min = Map.get(list2[i]) + i ; 13 res.clear() ; 14 res.add(list2[i]) ; 15 }else if (Map.get(list2[i]) + i == Min){ 16 res.add(list2[i]) ; 17 } 18 } 19 } 20 return res.toArray(new String[res.size()]) ; 21 } 22 }