题目描述:
题解思路:(哈希表+遍历)
1、首先将list1中的元素以及对应的下标映射到哈希表中,这样在list2中遍历每个元素时可以很快速方便的查找并求出最小下标和
2、遍历list2中的每个元素,在哈希表中查找是否有list2中的元素,如果有需要先判断下标和是否更小,如果更小先将ans数组清空,并把相应的信息存储进去(下标和、对应的元素)。
3、请结合代码理解
class Solution {
public:
vector<string> findRestaurant(vector<string>& list1, vector<string>& list2) {
vector<string> ans;
unordered_map<string,int> Lmap;
int len1=list1.size();
int len2=list2.size();
int min=INT_MAX;
for(int i=0;i<len1;i++)
{
Lmap[list1[i]]=i;
}
for(int i=0;i<len2;i++)
{
if(Lmap.count(list2[i])>0)//在list2中有list1中的元素
{
if(Lmap[list2[i]]+i<min)//下标和更小
{//将对应的信息存入
ans.clear();
min=Lmap[list2[i]]+i;
ans.emplace_back(list2[i]);
}
else if(Lmap[list2[i]]+i==min)
{//如果下标和相等,直接将当时的list[i]存入ans
ans.emplace_back(list2[i]);
}
}
}
return ans;
}
};