LintCode 1883 · 前K個高頻關鍵詞

描述

給定一個評論列表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;
    }
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容