题目
有多篇文章输入,每篇文章分为标题行和正文行,每篇文章输入时标题和正文各占一行。需要统计所有文章中出现的热词并输出topN的热词。title中的词权重为3,text中权重为1,所有文章中的热词权重相加即为该词的总权重。排序方法为:
两词权重大的排前面
若权重一样,则在title中最先出现的排前面
若title中出现顺序一样,则在text中最先出现的排前面
测试案例:
3 2
xinguan feiyan xinzeng bendi quezhen anli
ju baodao chengdu xinzeng xinguan feiyan bendi quezhen anli yili shenzhen xinzeng bendi quezhen anli liangli yi***gti kongzhi lianghao
xinguan yimiao linchuang shiyan
wuzhong xinguan yimiao tongguo sanqi linchaung shiyan xiaoguo lianghao
输出
xinguan xinzeng bendi
代码实现
const rl = require("readline").createInterface({
input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
void (async function () {
// Write your code here
while ((line = await readline())) {
let [topN, titleNum] = line.split(" ").map(Number);
let obj = {
};
for (let i = 0; i < titleNum; i++) {
let title = await readline();
let titles = title.split(" ")
for (let j = 0; j < titles.length; j++) {
if (obj[titles[j]]) {
obj[titles[j]]["times"] += 3;
if (obj[titles[j]]["titleIndex"]) {
obj[titles[j]]["titleIndex"] = Math.min(obj[titles[j]]["titleIndex"],j)
} else {
obj[titles[j]]["titleIndex"] = j;
}
} else {
obj[titles[j]] = {
str: titles[j],
times: 3,
titleIndex: j
}
}
}
let text = await readline();
let texts = text.split(" ");
for (let j = 0; j < texts.length; j++) {
if (obj[texts[j]]) {
obj[texts[j]]["times"] += 1;
if (obj[texts[j]]["textIndex"]) {
obj[texts[j]]["textIndex"] = Math.min(obj[texts[j]]["textIndex"], j)
} else {
obj[texts[j]]["textIndex"] = j;
}
} else {
obj[texts[j]] = {
str: texts[j],
times: 1,
textIndex: j
}
}
}
}
let hot_word = Object.values(obj);
let sort_hot_word = hot_word.sort((a,b) => sortWord(a,b))
let result = [];
for (let i = 0; i < topN; i++) {
result.push(sort_hot_word[i].str)
}
console.log(...result);
}
function sortWord(a , b) {
if (a.times === b.times) {
if (a.titleIndex === b.titleIndex) {
return a.textIndex - b.textIndex;
}
return a.titleIndex - b.titleIndex;
}
return b.times - a.times;
}
})();