题解 | #查找兄弟单词#

查找兄弟单词

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

//先查找兄弟单词,两字符串不能完全相同(用strcmp比较结果不为零)
//并且长度要相等,然后利用一个整型数组的下标,统计每个字母出现的次数
//再对比两个整型数组,若完全相等就是兄弟单词,输出前用冒泡或其他排序方式排序再输出
#include <stdio.h>
#include<string.h>
void Sort(char str[1000][10],int count)//冒泡排序
{
    int i=0,j=0;
    char p[10];
    for(i=0;i<count-1;i++)
    {
        for(j=0;j<count-i-1;j++)
        {
            if(strcmp(str[j],str[j+1])>0)
            {
                strcpy(p,str[j]);
                strcpy(str[j],str[j+1]);
                strcpy(str[j+1],p);
            }
        }
    }
    return;
}
int main()
{
    char arr[1000][10],p[10],str[1000][10];
    int n=0,k=0,i=0,j=0,len,sz,count=0,flag=0,num[26],cpy[26];
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%s",arr[i]);
    }
    scanf("%s",p);
    sz=strlen(p);
    scanf("%d",&k);
    for(i=0;i<sz;i++)
    {
        num[p[i]-97]++;
    }
    for(i=0;i<n;i++)
    {
        len=strlen(arr[i]);
        memset(cpy,0,26);//每轮循环前要将数组清零
        if(len!=sz)
        {
            continue;
        }
        if(strcmp(p,arr[i])==0)
        {
            continue;
        }
        if(len!=sz)
        {
            continue;
        }
        for(j=0;j<len;j++)
        {
            cpy[arr[i][j]-97]++;
        }
        for(j=0;j<26;j++)
        {
            if(cpy[j]!=num[j])
            {
                flag=1;
                break;
            }
        }
        if(!flag)
        {
            strcpy(str[count],arr[i]);
            count++;
        }
        else
        {
            flag=0;
        }
    }
    printf("%d\n",count);
    if(k<=count)
    {
        Sort(str,count);
        printf("%s\n",str[k-1]);
    }
    return 0;
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-21 13:41
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

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