描述
给定一个评论列表reviews,一个关键字列表 keywords 以及一个整数k。
找出在不同评论中出现次数最多的前k个关键词,这k个关键词按照出现次数的由多到少来排序。
字符串不区分大小写,如果关键字在不同评论中出现的次数相等,请按字母顺序从小到大排序
思路
构建数组arr[lkeywords.length],每位对应关键字出现的次数。遍历reviews列表,填充arr的值,再取出前K个即可。
public List<String> topkKeywords(int k, String[] keywords, String[] reviews) {
//构建数组
int[] arr = new int[keywords.length];
for(String review: reviews){
//评论小写,并按照关键字切成数组
String[] words = review.toLowerCase().split("[,;?'\\.\\!\\\\ \\[\\]]");
for(int i = 0 ; i < keywords.length ;i++){
for(int j = 0 ; j < words.length;j++){
//填充arr数据
if(keywords[i].equals(words[j].trim())){
arr[i]++;
break;
}
}
}
}
int[] res = new int[k];
for(int i = 0 ; i <k;i++){
int postion = -1;
int max = -1;
for(int j = 0 ; j< arr.length ;j++){
if(arr[j] > max){
max = arr[j];
postion =j;
}else if (arr[j] == max){
if(keywords[j].compareTo(keywords[postion])<0){
max = arr[j];
postion =j;
}
}
}
res[i] = postion;
if(postion >= 0){
arr[postion] = -2;
}
}
List<String> result = new ArrayList();
for(int i =0 ; i < k ;i++){
if(res[i] >=0){
result.add(keywords[res[i]]);
}
}
return result;
}