题解 | 查找兄弟单词

查找兄弟单词

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;
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务