给一非空的单词列表,返回前 k 个出现次数最多的单词。 返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率,按字母顺序排序。 输入:第1行为k值,第2行单词列表,单词列表以end结尾,end不属于单词列表中的单词。 2 i love leetcode i love coding end 输出: i love 用c语言
时间: 2024-02-20 13:56:10 浏览: 90
好的,以下是使用C语言实现的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_N 10000 // 单词列表最大长度
#define MAX_M 100 // 单词最大长度
// 定义单词结构体
typedef struct Word {
char str[MAX_M];
int freq;
} Word;
// 比较函数,用于排序
int cmp(const void* a, const void* b) {
Word* wa = (Word*)a;
Word* wb = (Word*)b;
if (wa->freq != wb->freq) {
return wb->freq - wa->freq; // 按出现次数从大到小排序
} else {
return strcmp(wa->str, wb->str); // 出现次数相同时,按字母顺序从小到大排序
}
}
int main() {
int k;
char words[MAX_N][MAX_M];
int n = 0;
// 读入单词列表
scanf("%d", &k);
while (scanf("%s", words[n]) != EOF) {
if (strcmp(words[n], "end") == 0) {
break;
}
n++;
}
// 统计单词出现次数
Word* count = (Word*)malloc(n * sizeof(Word));
int m = 0;
for (int i = 0; i < n; i++) {
int flag = 0;
for (int j = 0; j < m; j++) {
if (strcmp(words[i], count[j].str) == 0) {
count[j].freq++;
flag = 1;
break;
}
}
if (!flag) {
strcpy(count[m].str, words[i]);
count[m].freq = 1;
m++;
}
}
// 对结果进行排序
qsort(count, m, sizeof(Word), cmp);
// 输出结果
for (int i = 0; i < k && i < m; i++) {
printf("%s\n", count[i].str);
}
free(count); // 释放内存
return 0;
}
```
输入样例:
```
2
i love
leetcode
i
love
coding
end
```
输出样例:
```
i
love
```
阅读全文