OA原题描述参考:
注意:具体抽到的题目可能会有细微变化。
大概意思是给人推荐菜谱,input是两个二维String 数组,第一个用来存菜名和对应的菜系,第二个用来存人名和这个人喜欢的菜系,要去返回一个二维String数组,存的值是人名对应可能喜欢的菜名(如果人名后面对应的是“*”,那么就表示所有菜系都要)。
input: String[][] menu, String[][] personPreferences.
output: String[][] recommendation
example 1:
input: {{"Pizza", "Italian"}, {"Pasta", "Italian"}, {"Burger", "American"}}, {{"Peter", "Italian"}, {"Adam", "American"}}
Expected output: {{"Peter", "Pizza"}, {"Peter", "Pasta"}, {"Adam", "Burger"}}
example 2:
input: {{"Pizza", "Italian"}, {"Pasta", "Italian"}, {"Burger", "American"}}, {{"Peter", "*"}}.
Expected output: {{"Peter", "Pizza"}, {"Peter", "Pasta"}, {"Peter", "Burger"}}
解题思路参考:
几乎没坑,就是考察基本数据结构HashMap。把菜谱存入HashMap后,对person进行循环匹配,注意*号的处理。
参考答案:
package com.amazon;
import java.util.*;
/**
* Created by Tian on 2017/8/8.
*/
public class Dish {
public static void main(String[] args) {
String[][] menu = {{"Pizza", "Italian"}, {"Pasta", "Italian"}, {"Burger", "American"}};
String[][] person = {{"Peter", "Italian"}, {"Adam", "American"}, {"YiChi", "Chinese"},
{"Me", "*"}};
Dish dh = new Dish();
String[][] res = dh.recommend(menu, person);
for (int i = 0; i < res.length; i++) {
System.out.println(res[i][0] + "," + res[i][1]);
}
}
public String[][] recommend(String[][] menu, String[][] person) {
int mx = menu.length;
int my = menu[0].length;
Map<String, Set<String>> menuHash = new HashMap<String, Set<String>>();
for (int i = 0; i < menu.length; i++) {
if (!menuHash.containsKey(menu[i][1])) {
Set<String> set = new HashSet<String>();
set.add(menu[i][0]);
menuHash.put(menu[i][1], set);
} else {
menuHash.get(menu[i][1]).add(menu[i][0]);
}
}
List<List<String>> res = new ArrayList<List<String>>();
for (int i = 0; i < person.length; i++) {
if (person[i][1].equals("*")) {
for (Set<String> set : menuHash.values()) {
for (String each : set) {
List<String> elem = new ArrayList<String>();
elem.add(person[i][0]);
elem.add(each);
res.add(elem);
}
}
continue;
}
if (!menuHash.containsKey(person[i][1])) continue;
Set<String> set = menuHash.get(person[i][1]);
for (String each : set) {
List<String> elem = new ArrayList<String>();
elem.add(person[i][0]);
elem.add(each);
res.add(elem);
}
}
int n = res.size();
String[][] ret = new String[n][2];
for (int i = 0; i < n; i++) {
ret[i][0] = res.get(i).get(0);
ret[i][1] = res.get(i).get(1);
}
return ret;
}
}