题解 | 查找兄弟单词

查找兄弟单词

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

#include <stdio.h>
#include <string.h>

int bro(char s1[],char s2[]){
    int len1=strlen(s1),len2=strlen(s2);
    if((len1==len2)&&(strcmp(s1,s2)!=0)){
        int a[len1],b[len1];
        for(int i=0;i<len2;i++){
            a[i]=0;
            b[i]=0;
        }
        for(int i=0;i<len1;i++){
            for(int j=0;j<len2;j++){
                if(s1[i]==s2[j]&&a[i]==0&&b[j]==0){
                    a[i]=1;
                    b[j]=1;
                }
            }
        }
        int num=0;
        for(int i=0;i<len1;i++){
            if(a[i]==0||b[i]==0){
                num++;
            }
        }
        if(num==0){
            return 1;
        }
    }
    return 0;
}

int main() {
    int n,k,num=0;
    scanf("%d",&n);
    char s[n][10],x[10];
    for(int i=0;i<n;i++){
        scanf("%s",s[i]);
    }
    scanf("%s %d",&x,&k);
    int len=strlen(x);
    for(int i=0;i<n;i++){
        if(bro(s[i],x)){
            num++;
        }
    }
    printf("%d\n",num);
    for(int i=0;i<n;i++){
        for(int j=i+1;j<n;j++){
            if(strcmp(s[i],s[j])>0){
                char temp[10];
                strcpy(temp,s[i]);
                strcpy(s[i],s[j]);
                strcpy(s[j],temp);
            }
        }
    }
    int kk=0;
    for(int i=0;i<n;i++){
        if(bro(s[i],x)){
            kk++;
        }
        if(kk==k){
            printf("%s\n",s[i]);
            break;
        }
    }
    return 0;
}

这道题的核心是查找 “兄弟字符串”,并按要求统计数量、输出排序后的第 k 个兄弟串:

1. 什么是兄弟字符串?

  • 两个字符串长度必须相等
  • 两个字符串内容不相同
  • 两个字符串字符种类、个数完全一样(只是顺序不同,互为重排) 满足以上 3 点,就是兄弟字符串

2. 程序整体执行步骤

  1. 输入 n 个字符串,存入数组
  2. 输入目标串 x + 数字 k
  3. 遍历所有字符串,统计与 x 是兄弟串的总数量并输出
  4. 将所有字符串字典序从小到大排序
  5. 遍历排序后的数组,找到第 k 个兄弟串并输出
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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