解法一:
class Solution {
public String[] findRestaurant(String[] list1, String[] list2) {
Map<String, Integer> map1 = new HashMap<>();
Map<String, Integer> map2 = new HashMap<>();
//分别统计list1和list2的HashMap
for(int i = 0; i < list1.length; i++){
map1.put(list1[i], i);
}
for(int i = 0; i < list2.length; i++){
map2.put(list2[i], i);
}
//用map来存放下标之和相同的字符串
Map<Integer, List<String>> save = new HashMap<>();
//寻找下标之和最小的两个同时出现在两个字符串数组中的字符串
int min = Integer.MAX_VALUE;
for(String key : map1.keySet()){
if(map2.containsKey(key)){
if(map1.get(key) + map2.get(key) < min){//移除下标之和较大的字符串
save.remove(min);
min = map1.get(key) + map2.get(key);
List<String> list = new ArrayList<>();
list.add(key);
save.put(min, list);
}
else if(map1.get(key) + map2.get(key) == min){//这里用else if而不能用if,因为上面<min修改后下面就满足=min了
List<String> list = save.get(map1.get(key) + map2.get(key));
list.add(key);
save.put(map1.get(key) + map2.get(key), list);
}
//大于的情况就不管了
}
}
//这样最后map中一定只剩下一个键值对,就是我们想要的
Iterator<List<String>> it = save.values().iterator();
List<String> list = null;
while(it.hasNext()){
list = it.next();
}
String[] res = new String[list.size()];
for(int i = 0; i < list.size(); i++){
res[i] = list.get(i);
}
return res;
}
}