假设Andy和Doris想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示。
你需要帮助他们用最少的索引和找出他们共同喜爱的餐厅。 如果答案不止一个,则输出所有答案并且不考虑顺序。 你可以假设总是存在一个答案。
用map 记录list1,key为字符串,value为对应索引。第二次遍历list 2.如果包含相同key 然后比较两索引和是否为最小,是则记录字符串。(每次发现最小索引和需要删除之前的字符串)
class Solution {
public String [] findRestaurant(String [] list1, String [] list2) {
HashMap <String,Integer> map1 = new HashMap<String,Integer>();
LinkedList <String> list = new LinkedList<String>(); //用链表记录索引值最小的字符串,需要删除操作,比arraylist(底层用数组)效率快
int temp = Integer.MAX_VALUE;
for(int i = 0; i < list1.length; i++) { //存储 list1 将字符串作为key,索引作为value
map1.put(list1[i], i);
}
for(int j = 0; j < list2.length; j++) {
if(map1.containsKey(list2[j]) ) {
String str = list2[j];
int i = map1.get(str); // 获得 list1 对应索引
if(temp > i + j) {
temp = i + j; //记录最小的索引和
list.clear(); //清除之前记录
list.add(str) ; //将索引值最小者,添加进list集合
}else if(temp == i + j){
list.add(str);
}else {
continue;
}
}
}
String [] strs = new String[list.size()];
for(int k = 0 ; k < list.size(); k++) {
strs[k] = list.get(k);
}
return strs;
}
}