题解 | 查找兄弟单词
查找兄弟单词
https://www.nowcoder.com/practice/03ba8aeeef73400ca7a37a5f3370fe68
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int compare(const void* p, const void* q) {
return strcmp((char*)p, (char*)q);
}
int main() {
int n = 0;
if (scanf("%d", &n) != 1)
return 0;
char (*s)[15] = malloc(n * sizeof(*s));
if (s == NULL)
return -1;
for (int i = 0; i < n; i++) {
scanf("%14s", s[i]);
}
char x[15] = {0};
if (scanf("%14s", x) != 1)
return 0;
int k = 0;
if (scanf("%d", &k) != 1)
return 0;
// 找出所有兄第字符串 存入一个数组中
char (*ss)[15] = malloc(n * sizeof(*ss)); // 存放兄第字符串
if (s == NULL)
return -1;
int a1[30] = {0};
int count = 0;
for (int i = 0; x[i] != '\0'; i++) {
a1[x[i] - 'a']++;
}
for (int i = 0; i < n; i++) {
// 1. 长度不等肯定不是兄弟
if (strlen(s[i]) != strlen(x))
continue;
// 2. 字符串完全一样也不是兄弟
if (strcmp(s[i], x) == 0)
continue;
int a2[30] = {0};
for (int j = 0; s[i][j] != '\0'; j++) {
a2[s[i][j] - 'a']++;
}
if (memcmp(a1, a2, sizeof(a1)) == 0)
strcpy(ss[count++], s[i]);
}
// 对所有兄第数组进行排序
qsort(ss, count, sizeof(ss[0]), compare);
printf("%d\n", count);
if (k <= count)
printf("%s", ss[k - 1]);
free(s);
free(ss);
return 0;
}