Mô tả bài toán
Hai bạn có danh sách nhà hàng yêu thích (chuỗi). Tìm nhà hàng chung có tổng chỉ số (index) nhỏ nhất. Nếu tie, trả về tất cả.
Ví dụ: ["ABC","PQR","MNO","XYZ"] và ["TUV","GHI","KLM","ABC"] → Chung "ABC" tại chỉ số 0+3=3 → ["ABC"].
Giải pháp (Map lưu tổng chỉ số)
- Duyệt cặp chỉ số
(i,j)của 2 danh sách. - Nếu tên trùng → lưu vào map
sum_index → list tên. - Trả về list tại key nhỏ nhất của map (map tự sắp xếp key).
Ví dụ minh họa
#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<string> v) {
cout << "[";
for (string s : v) cout << s << ", ";
cout << "]" << endl;
}
class Solution {
public:
vector<string> findRestaurant(vector<string>& l1, vector<string>& l2) {
map<int, vector<string>> mp;
for (int i = 0; i < l1.size(); i++)
for (int j = 0; j < l2.size(); j++)
if (l1[i] == l2[j])
mp[i + j].push_back(l1[i]);
return mp.begin()->second;
}
};
int main() {
Solution ob;
vector<string> v = {"ABC","PQR","MNO","XYZ"}, v1 = {"TUV","GHI","KLM","ABC"};
print_vector(ob.findRestaurant(v, v1));
return 0;
}
Đầu vào
{"ABC","PQR","MNO","XYZ"}, {"TUV","GHI","KLM","ABC"}
Đầu ra
[ABC, ]