查找兄弟单词之C语言

查找兄弟单词

http://www.nowcoder.com/questionTerminal/03ba8aeeef73400ca7a37a5f3370fe68

思路:判断兄弟单词到时候,可能也许会存在大写字母,则-‘A’,然后循环判断是否相等。
注意:要求找的是字典排序第k大的兄弟单词,需要将兄弟单词排序后再输出。神坑!!!

//判断是否为兄弟单词
#include<stdio.h>
#include<string.h>
int judge(char* a,char* b){
    //单词相等则不是兄弟单词,直接输出0
    if(!strcmp(a, b))
        return 0;

    //长度不等则不是兄弟单词,直接输出0
    int aLen = strlen(a);
    int bLen = strlen(b);
    if(aLen != bLen)
        return 0;

    char c['z' - 'A'] = {0},d['z' - 'A'] = {0};
    for(int i =0;i<aLen;i++){
        c[a[i]-'A']++;
        d[b[i]-'A']++;
    }

    //循环判断,不等则直接输出0
    for(int i = 0; i < 'z' - 'A'; i++){
        if(c[i] != d[i])
            return 0;
    }

    return 1;

}

int main(void){
    int n;
    while(scanf("%d",&n) != EOF){
        char str[n][1000],bro[n][1000],x[1000]={0};
        int k,key = 0;
        for(int i = 0;i<n;i++){
            scanf("%s",&str[i]);
        }
        scanf("%s",&x);
        scanf("%d",&k);
        //获取兄弟单词并排序,注意,他是要输出==》字典序第k大的那个单词。。。。坑!!!
        for(int i = 0;i<n;i++){
            if(judge(x, str[i])){
                strcpy(&bro[key], str[i]);
                //将兄弟单词排序
                for(int j = key-1;j>= 0;j--){
                    if(strcmp(str[i], bro[j])<0){
                        strcpy(&bro[j+1], bro[j]);
                        strcpy(&bro[j],str[i]);
                    }
                }
                key++;
            }
        }

        printf("%d\n",key);
        if(k <= key && k > 0){
            printf("%s\n",bro[k-1]);
        }
    }
    return 0;
}
全部评论

相关推荐

点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
09-30 19:49
起名星人:蛮离谱的,直接要求转投销售
投递汇川技术等公司10个岗位
点赞 评论 收藏
分享
评论
1
4
分享
牛客网
牛客企业服务