문제 설명 :
가정 앤디와 도리스는 저녁 식사를 위해 식당을 선택하는 것이 좋습니다, 그리고 그들이 좋아하는 레스토랑 목록, 각 레스토랑의 이름이 문자열로 표현을 표명했다.
당신은 그들을 도울 필요가 인덱스의 최소 자신의 발견 일반적인 좋아하는 레스토랑 . 대답은 더 하나 개의 출력 모든 해답보다하고 순서를 고려하지 않는 경우. 당신은 항상 답이 있다고 가정 할 수있다.
예 1 :
입력 : [ "쇼군", "타피오카 익스프레스", "버거 킹", "KFC"] [ "피아 티", "토레이 파인즈 그릴", "헝그리 헌터 스테이크", "장군"] 출력 : [ "쇼군"] 설명 : 유일한 공통 자신이 좋아하는 레스토랑 "쇼군"입니다.
예 2 :
입력 : [ "쇼군", "타피오카 익스프레스", "버거 킹", "KFC"] [ "KFC", "쇼군", "버거 킹"] 출력 : [ "장군은"] 설명 : 공통 사랑이 최소의 인덱스 및 레스토랑 최소의 인덱스 1 (1 + 0)이 "장군"구비하다.
팁 :
- 길이 두리스트는 [1, 1,000] 내에있다.
- 두리스트 내의 문자열의 길이의 범위는 [1,30]에있을 것이다.
- 0에서 1로 인덱스를 뺀리스트의 길이.
- 두 목록은 중복 요소가 없습니다.
기본적인 아이디어 :
먼저 확립 반복적 인 요소와 자신의 인덱싱 및 매핑 .
그리고 가장 작은 인덱스를 찾을 수 있습니다.
리턴하기 위해 다음 인덱스 최소 인덱스의 모든 요소에 대해 동일한 스위프를 다시 획득 .
AC 코드 :
class Solution {
public:
vector<string> findRestaurant(vector<string>& list1, vector<string>& list2) {
// 找到重复的字符串,记录他们重复的元素以及对应的索引和
map<string, int> m;
for (int i = 0; i < list1.size(); ++i) {
auto it = find(list2.begin(), list2.end(), list1[i]);
if (it != list2.end()) {
m[list1[i]] = (it - list2.begin()) + i;
}
}
// 遍历hashmap,找到最小的索引和
int min_index = INT_MAX;
string min_string;
for (auto i = m.begin(); i != m.end(); ++i) { // hashmap的iterator使用pair的方式来访问key和value
if (i->second < min_index) {
min_index = i->second;
min_string = i->first;
}
}
// 返回结果集
vector<string> res;
for (auto i = m.begin(); i != m.end(); ++i) {
if (i->second == min_index) {
res.push_back(i->first);
}
}
return res;
}
};