OOP h11
字符串 content
是一个超市的历次购物小票的合计,每次购物的明细之间用分号分割,每个商品之间用半角逗号分开
请找出哪两个商品被同时购买的频率最高,将这 2 个商品名称返回,名称之间用逗号分隔
测试的时候,商品名称可能增加新的商品,例如方便面、面包…
@param content
历次购物的明细,例如:炸鸡,可乐,啤酒;薯片,啤酒,炸鸡;啤酒,雪碧,炸鸡
@return
哪两个商品被同时购买的频率最高,将这 2 个商品名称返回,名称之间用逗号分隔
和前面的练习 getFrequentWord
类似,找到两个同时购买频率最高的商品,就是把每次购物的商品两两组合,最终将所有购物商品的二元组作为键存放在一个映射表中,用值代表出现的次数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
| package com.huawei.classroom.student.h11;
import java.util.*;
public class Home11 {
public Home11() { }
public String getFrequentItem(String content) { int i, j, k, max; String[] shopping; String[] items; HashSet<String> doubleItemsAns; HashMap<HashSet<String>, Integer> doubleItemsMap; Set<HashSet<String>> doubleItemsSet; String ans;
shopping = content.split(";"); doubleItemsMap = new HashMap<>(); for (i = 0; i < shopping.length; i++) { items = shopping[i].split(","); for (j = 0; j < items.length - 1; j++) { for (k = 1; k < items.length; k++) { if (items[j].equals(items[k])) { continue; } HashSet<String> doubleItems = new HashSet<>(2); doubleItems.add(items[j]); doubleItems.add(items[k]); if (!doubleItemsMap.containsKey(doubleItems)) { doubleItemsMap.put(doubleItems, 1); } else { doubleItemsMap.put(doubleItems, doubleItemsMap.get(doubleItems) + 1); } } } }
max = 0; doubleItemsAns = new HashSet<>(2); doubleItemsSet = doubleItemsMap.keySet(); for (HashSet<String> doubleItem: doubleItemsSet) { if (max < doubleItemsMap.get(doubleItem)) { max = doubleItemsMap.get(doubleItem); doubleItemsAns = doubleItem; } }
items = doubleItemsAns.toArray(new String[0]); ans = items[0] + "," + items[1]; return ans; }
}
|