题解 | #查找兄弟单词#
查找兄弟单词
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;
}

