题目
假设 Andy 和 Doris 想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示。
你需要帮助他们用最少的索引和找出他们共同喜爱的餐厅。 如果答案不止一个,则输出所有答案并且不考虑顺序。 你可以假设答案总是存在。
示例 1:
输入: list1 = [“Shogun”, “Tapioca Express”, “Burger King”, “KFC”],list2 = [“Piatti”, “The Grill at Torrey Pines”, “Hungry Hunter Steakhouse”, “Shogun”]
输出: [“Shogun”]
解释: 他们唯一共同喜爱的餐厅是“Shogun”。
分析
这道题目要求同时出现在俩个列表中的字符串,且对应的索引和最小。这个很明显可以用map,先遍历第一个数组存好元素和索引值,然后遍历第二个数组,寻找索引和最小的元素
import java.util.Map;
import java.util.HashMap;
import java.util.List;
import java.util.ArrayList;
public class minimumIndexSumofTwoLists {
public static void main(String[] args) {
String[] arr = {"Shogun", "Tapioca Express", "Burger King", "KFC"};
String[] brr = {"Piatti", "The Grill at Torrey Pines", "Hungry Hunter Steakhouse", "Shogun"};
String[] crr = getMinIndex(arr,brr);
for(String s : crr) {
System.out.println(s);
}
}
public static String[] getMinIndex(String[] arr,String[] brr) {
Map<String,Integer> mp = new HashMap();
for(int i = 0;i<arr.length;i++) {
mp.put(arr[i],i);
}
List<String> lis = new ArrayList();
int res = Integer.MAX_VALUE;
for(int i = 0;i<brr.length;i++) {
if(mp.containsKey(brr[i])) {
int idx = mp.get(brr[i]) + i;
if(res == idx) {
lis.add(brr[i]);
} else if(idx < res) {
res = idx;
lis.clear();
lis.add(brr[i]);
}
}
}
return lis.toArray(new String[lis.size()]);
}
}