599. 两个列表的最小索引总和
题目描述

哈希映射实现
#pragma once
#include <iostream>
#include<vector>
#include<unordered_map>
using namespace std;
class Solution
{
public:
vector<string> findRestaurant(vector<string>& list1, vector<string>& list2)
{
unordered_map<string, int> string2int;
unordered_map<int, vector<string>> int2string;
int n = list1.size();
int m = list2.size();
int minsum = INT_MAX;
for (int i = 0; i < n; i++)
{
string2int.insert(make_pair(list1[i], i));
}
for (int j = 0; j < m; j++)
{
if (string2int.count(list2[j]) > 0)
{
int sum = string2int[list2[j]] + j;
int2string[sum].push_back(list2[j]);
minsum = sum < minsum ? sum : minsum;
}
}
return int2string[minsum];
}
};
int main()
{
string str1[] = { "Shogun", "Tapioca Express", "Burger King", "KFC" };
string str2[] = { "KFC", "Burger King", "Tapioca Express", "Shogun" };
vector<string> list1;
vector<string> list2;
for (int i = 0; i < sizeof(str1) / sizeof(string); i++)
{
list1.push_back(str1[i]);
}
for (int j = 0; j < sizeof(str2) / sizeof(string); j++)
{
list2.push_back(str2[j]);
}
Solution S;
vector<string> ans = S.findRestaurant(list1, list2);
for (auto it = ans.begin(); it != ans.end(); it++)
{
cout << *it << " ";
}
cout << endl;
system("pause");
return 0;
}
运行结果

提交结果
