假设Andy和Doris想要选择一家餐馆吃晚餐,他们都有一个各自最喜爱的餐馆列表。
你需要用最少的列表索引总和来帮助他们找出他们的共同兴趣。 如果最少列表索引总和的答案不唯一,则输出所有答案并且没有顺序要求。 你可以假设总有一个答案。
样例
案例 1:
输入:
["Shogun", "Tapioca Express", "Burger King", "KFC"]
["Piatti", "The Grill at Torrey Pines", "Hungry Hunter Steakhouse", "Shogun"]
输出: ["Shogun"]
解释: 唯一一个两个人都喜欢的餐厅是 "Shogun".
案例 2:
输入:
["Shogun", "Tapioca Express", "Burger King", "KFC"]
["KFC", "Shogun", "Burger King"]
输出: ["Shogun"]
解释: 两个人都喜欢的、并且索引和最小的餐厅是 "Shogun",和为 1 (0+1).
注意事项
1.两个列表的长度都将在[1,1000]的范围内。
2.两个列表中的字符串长度将在[1,30]范围内。
3.索引从0开始直到到列表长度减1。
4.两个列表中都没有重复。
class Solution {
public:
/**
* @param list1: a list of strings
* @param list2: a list of strings
* @return: the common interest with the least list index sum
*/
vector<string> findRestaurant(vector<string> &list1, vector<string> &list2) {
// Write your code here
vector<string> ret;
unordered_map<string, int> mymap1;
unordered_map<string, int> mymap2;
for(int i = 0; i < list1.size(); i++)
{
mymap1[list1[i]] = i;
}
for(int i = 0; i < list2.size(); i++)
{
mymap2[list2[i]] = i;
}
int mymin = INT_MAX;
for(int i = 0; i < list1.size(); i++)
{
auto it1 = mymap1.find(list1[i]);
auto it2 = mymap2.find(list1[i]);
if(it2 != mymap2.end())
{
int sum = it1->second + it2->second;
if(sum < mymin)
{
mymin = sum;
if(ret.size() == 0)
ret.push_back(list1[i]);
else
{
ret.clear();
ret.push_back(list1[i]);
}
}
else if(sum == mymin)
{
ret.push_back(list1[i]);
}
}
}
return ret;
}
};