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