描述
給定一個評論列表reviews,一個關鍵字列表 keywords 以及一個整數(shù)k。
找出在不同評論中出現(xiàn)次數(shù)最多的前k個關鍵詞,這k個關鍵詞按照出現(xiàn)次數(shù)的由多到少來排序。
字符串不區(qū)分大小寫,如果關鍵字在不同評論中出現(xiàn)的次數(shù)相等,請按字母順序從小到大排序
思路
構建數(shù)組arr[lkeywords.length],每位對應關鍵字出現(xiàn)的次數(shù)。遍歷reviews列表,填充arr的值,再取出前K個即可。
public List<String> topkKeywords(int k, String[] keywords, String[] reviews) {
//構建數(shù)組
int[] arr = new int[keywords.length];
for(String review: reviews){
//評論小寫,并按照關鍵字切成數(shù)組
String[] words = review.toLowerCase().split("[,;?'\\.\\!\\\\ \\[\\]]");
for(int i = 0 ; i < keywords.length ;i++){
for(int j = 0 ; j < words.length;j++){
//填充arr數(shù)據(jù)
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;
}