题解 | #查找兄弟单词#

查找兄弟单词

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

//*xtj
#include<stdio.h>
#include<string.h>
int isbrother(char* next, int lenth);
int letter[100] = { 0 };
int len = 0;
char obj[100];
int main()
{
    int n = 0, k = 0;
    char word[1000][100];
    char Bword[1000][100];

    while(scanf("%d", &n)!=EOF)
    {
        for (int i = 0; i < n; i++)
        {
            scanf("%s", word[i]);
        }
        scanf("%s", obj);//输入目标单词
        scanf("%d", &k);//输入第k个
        //shurujiesu
        int count = 0;

        len = strlen(obj);
        for (int i = 0; i < len; i++)
        {
            letter[obj[i] - 'a']++;;//判断obj中含有什么字母
        }
        int m = 0;//含有的兄弟单词数量
        for (int i = 0; i < n; i++)
        {
            if (isbrother(word[i], strlen(word[i])))
            {
                strcpy(Bword[m++],word[i]);
            }
        }
        printf("%d\n", m);//输出单词个数
        for (int i = 0; i < m - 1; i++)//排序
        {
            for (int j = i + 1; j < m; j++)
            {
                if (strcmp(Bword[i], Bword[j]) >=0)//从小到大排序
                        //!!!!务必认真仔细,这个地方不是难点,我本应该不会错
                    //却因为>=0写成了>1,导致最后一个算例做错,检查了很久都没有检查出来
                {
                    char temp[100];
                    strcpy(temp, Bword[j]);
                    strcpy(Bword[j], Bword[i]);
                    strcpy(Bword[i], temp);
                }
            }
        }
        
        if (k <= m)
        {
            printf("%s", Bword[k - 1]);
        }
    }

    return 0;
}

int isbrother(char* next, int lenth)
{
    if (lenth != len)
        return 0;//长度不同不是
    if (!strcmp(next, obj))
        return 0;//完全相同的不是
    int let2[100] = { 0 };
    for (int i = 0; i < lenth; i++)
    {
        if (!letter[next[i] - 'a'])
            return 0;//含有没有的字母不是
        let2[next[i] - 'a']++;;//判断next中含有什么字母,及其个数
    }
    for (int i = 0; i < 26; i++)
    {
        if (let2[i] != letter[i])
        {
            return 0;//含有某字母个数不一样
        }
    }
    return 1;//通过考察,是兄弟单词
}
//*/

写代码时务必认真仔细,不能因为简单的功能就粗心!
不然代码小错误很难发现,排查需要浪费大量时间!!!

全部评论

相关推荐

个人背景:学院二本计科专业&nbsp;大二开始实习个人经历:安克创新&nbsp;、理想汽车、字节跳动碎碎念:我做事只有三分钟热度。看到进了大厂的同学,我会羡慕,也会跟着努力上进;但遇到好看的小说,我又会放下手头的事沉迷其中,之前的坚持也就中断了。我有些自卑,总觉得自己学历和外貌都不够好。之前偶然在网上受到关注,我就喜欢上了上网,因为这里有很多人认可我。但我也很在意别人的评价,偶尔看到嘲讽的言论,会触发我的自卑情绪,让我感到愤怒。有时候我会强硬地回怼,有时候又会懦弱地选择无视。我也有虚荣心。不管是拿到安克、理想还是字节的机会,我在分享的时候都会带着这份心思。我会特意强调自己学历不好,是为了衬托出过程的艰难,以此显得自己更厉害。我知道,人往往会炫耀自己缺少的东西,来掩盖内心的空洞。我总想着走捷径,不太喜欢踏踏实实地做事。找实习的时候,我花了更多时间在研究面试技巧上,而不是提升专业能力。我会反复听面试录音分析技巧,看面试教程学习怎么和不同的面试官沟通,还会每天自言自语练习语言表达,同学都觉得我有点奇怪。我的实习生涯里,侥幸和运气占了很大一部分。我总在想,如果有一天我失去了这份幸运,这些特质可能会让我一蹶不振。ps:&nbsp;很多人会问我学习路线和经验&nbsp;但是就像我上面说的&nbsp;我的实习过程靠的很多是关键节点的运气&nbsp;技术上面我可能不如很多人&nbsp;&nbsp;所以请大家理性求助和理性参考我的回答&nbsp;附上我的投递记录
我的offer在哪里...:从去年看到现在,飞升哥就是榜样
我的求职进度条
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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