2022.7.10今天你刷题了吗?
题目:
假设 Andy 和 Doris 想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示。
你需要帮助他们用最少的索引和找出他们共同喜爱的餐厅。 如果答案不止一个,则输出所有答案并且不考虑顺序。 你可以假设答案总是存在。
分析:
给你两个字符串数组,你需要确定里面相同的元素,并且计算相同元素的下标之和,找到下标之和最小的那个,如果有多个最小的,则把那些元素输出。
思路:利用一个哈希表,先把其中一个字符串数组存入,其中键值为字符串,键值对为下标。然后开始遍历第二个字符串数组,每遍历一次就判断当前元素是否存在于map中,如果存在,则计算一下下标和,不存在则不管。
注意:当判断当前的下标最小时,需要把之前的数组内部全部清空,然后再插入,而如果和之前一样都是一样小,则不需要清空直接插入
解析:
1.哈希表
class Solution {
public:
vector<string> findRestaurant(vector<string>& list1, vector<string>& list2) {
unordered_map<string, int>map;
vector<string>res={"aaa"};
int minindex = 1000000;
for (auto i=0;i<list1.size();i++)
{
map[list1[i]] = i;
}
for (auto i = 0; i < list2.size(); i++)
{
if (map.count(list2[i]) > 0)
{
//存在相同元素,j为list1中的下标
int j = map[list2[i]];
if (j + i < minindex)
{
res.clear();
res.push_back(list2[i]);
minindex = j + i;
}
else if (j + i == minindex)
{
res.push_back(list2[i]);
}
}
}
return res;
}
};