Design a Food Rating System LeetCode solution in Java

1
class FoodRatings {
2
HashMap<String, TreeSet<String>> cuiToFood = new HashMap();
3
HashMap<String, Integer> foodToRat = new HashMap();
4
HashMap<String, String> foodToCui = new HashMap();
5

6
public FoodRatings(String[] foods, String[] cuisines, int[] ratings) {
7
for (int i = 0; i < foods.length; i++) {
8
TreeSet<String> foodOfThisCuisine =
9
cuiToFood.getOrDefault(
10
cuisines[i],
11
new TreeSet<String>(
12
(a, b) ->
13
foodToRat.get(a).equals(foodToRat.get(b))
14
? a.compareTo(b)
15
: foodToRat.get(b) - foodToRat.get(a)));
16

17
// Both comparators are equal
18
/* new Comparator<String>(){
19
@Override
20
public int compare(String a, String b){
21
int aRat = foodToRat.get(a);
22
int bRat = foodToRat.get(b);
23

24
if(aRat != bRat) return bRat - aRat; // largest rating first
25
for(int i = 0; i < Math.min(a.length(), b.length()); i++){
26
if(a.charAt(i) != b.charAt(i)) return a.charAt(i) - b.charAt(i);
27
}
28
return a.length() - b.length();
29
}
30
})
31
*/
32

33
foodToRat.put(foods[i], ratings[i]);
34
foodOfThisCuisine.add(foods[i]);
35
foodToCui.put(foods[i], cuisines[i]);
36

37
cuiToFood.put(cuisines[i], foodOfThisCuisine);
38
}
39
}
40

41
// CompareTo() is used to compare whether 2 strings are equal in hashSet! So remove, change value
42
// of key in HashMap, then insert again
43
public void changeRating(String food, int newRating) {
44
String cui = foodToCui.get(food);
45
TreeSet<String> foodOfThisCui = cuiToFood.get(cui);
46
foodOfThisCui.remove(food);
47
foodToRat.put(food, newRating);
48

49
foodOfThisCui.add(food);
50
cuiToFood.put(cui, foodOfThisCui);
51
}
52

53
public String highestRated(String cuisine) {
54
return cuiToFood.get(cuisine).first();
55
}
56
}

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0