数组排序问题(某些测试用例失败)

array sorting problem(failing for some testcases)

提问人:Aryan Mane 提问时间:10/21/2023 最后编辑:Ted LyngmoAryan Mane 更新时间:10/21/2023 访问量:42

问:

https://www.hackerrank.com/challenges/sorting-array-of-strings/ 我编写的程序在 3 个测试用例中失败了。 我的代码-

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

int lexicographic_sort(const char* a, const char* b) {
    if (strcmp(a,b)>0)
    return 1;
    else
    return 0;
}

int lexicographic_sort_reverse(const char* a, const char* b) {
    if (strcmp(a,b)<0)
    return 1;
    else
    return 0;
}

int sort_by_number_of_distinct_characters(const char* a, const char* b) {
    int count1[26]={0},count2[26]={0};
    
    for (int i = 0; i < strlen(a); i++)
    {
        count1[a[i]-97]++;
    }
    for (int i = 0; i < strlen(b); i++)
    {
        count2[b[i]-97]++;
    }
    int distict1=0,distict2=0;
    
    for (int i = 0; i < 26; i++)
    {
        if (count1[i]>0)
        distict1++;
        if (count2[i]>0)
        distict2++;
    }

    if (distict1>distict2)
    {
        return 1;
    }
    else if (distict1<distict2)
    {
        return 0;
    }
    else
    {
        return lexicographic_sort(a,b);
    }
    
}

int sort_by_length(const char* a, const char* b) {
    if (strlen(a)>strlen(b))
    return 1;
    else if (strlen(a)<strlen(b))
    return 0;
    else
    return lexicographic_sort(a,b);
}

void string_sort(char** arr,const int len,int (*cmp_func)(const char* a, const char* b)){


    char store[2500];
    
    for (int j = 0; j < len - 1; j++)
    {
        for (int i = 0; i < len - j - 1; i++)
        {
            if ((*cmp_func)(arr[i],arr[i+1]))
            {
                strcpy(store,arr[i]); 
                strcpy(arr[i],arr[i+1]);
                strcpy(arr[i+1],store);
            }
        }
    }

}


int main() 
{
    int n;
    scanf("%d", &n);
  
    char** arr;
    arr = (char**)malloc(n * sizeof(char*));
  
    for(int i = 0; i < n; i++){
        *(arr + i) = malloc(1024 * sizeof(char));
        scanf("%s", *(arr + i));
        *(arr + i) = realloc(*(arr + i), strlen(*(arr + i)) + 1);
    }
  
    string_sort(arr, n, lexicographic_sort);
    for(int i = 0; i < n; i++)
        printf("%s\n", arr[i]);
    printf("\n");

    string_sort(arr, n, lexicographic_sort_reverse);
    for(int i = 0; i < n; i++)
        printf("%s\n", arr[i]); 
    printf("\n");

    string_sort(arr, n, sort_by_length);
    for(int i = 0; i < n; i++)
        printf("%s\n", arr[i]);    
    printf("\n");

    string_sort(arr, n, sort_by_number_of_distinct_characters);
    for(int i = 0; i < n; i++)
        printf("%s\n", arr[i]); 
    printf("\n");
}

其中一个失败的测试用例是

24
kkhcvkjrjcbyqixf
rbbxaogunbzkusueaycmhvvlwwdg
jdnmekotqiiuhuocqveozqyuol
mpbhaeumlebgxlotvkjxaedqfvqblcuxrxfrbbfmi
sfuiarujowqtnvodxaftz
qerrixgqfax
jxsdgicwbpssursc
rccyuvgtbyycvcnuuscfuziltagms
ymmamgvuzzsabpeqjailfdm
ohqwtlitxvtjdrddqxftmjjxlrkrwzhngxlci
xhprssixxauetipchbv
usrbhzasdlmbsduly
kvefczprbxuyposirzjuupfiszmmmkqxhwe
vtdyqzwhorrhsdbmsivmkjywvqveozqjvtjlshviyosr
tflecxolxmgnil
jdmewxsqfnbfdtwxoeisgiiufv
vdnyoqntoklhraixfdvcrzlkgvsacncxs
yhkncbxnkppsmuvjxmjkyrhrtjgvjbphkcumdtbpiqh
meglsrvrickbosyxvqefsar
tumemvczbk
tbimlmwoarnzmffuzfnybikhuhlviwidzsqngobjfqiuv
outduwlefinrdvpnbofrdmffvnvfjtt
ppckloqt
ekbbzrcpyvtmbajqxpzsiyixculqmgosqsurl

其预期输出为-

ekbbzrcpyvtmbajqxpzsiyixculqmgosqsurl
jdmewxsqfnbfdtwxoeisgiiufv
jdnmekotqiiuhuocqveozqyuol
jxsdgicwbpssursc
kkhcvkjrjcbyqixf
kvefczprbxuyposirzjuupfiszmmmkqxhwe
meglsrvrickbosyxvqefsar
mpbhaeumlebgxlotvkjxaedqfvqblcuxrxfrbbfmi
ohqwtlitxvtjdrddqxftmjjxlrkrwzhngxlci
outduwlefinrdvpnbofrdmffvnvfjtt
ppckloqt
qerrixgqfax
rbbxaogunbzkusueaycmhvvlwwdg
rccyuvgtbyycvcnuuscfuziltagms
sfuiarujowqtnvodxaftz
tbimlmwoarnzmffuzfnybikhuhlviwidzsqngobjfqiuv
tflecxolxmgnil
tumemvczbk
usrbhzasdlmbsduly
vdnyoqntoklhraixfdvcrzlkgvsacncxs
vtdyqzwhorrhsdbmsivmkjywvqveozqjvtjlshviyosr
xhprssixxauetipchbv
yhkncbxnkppsmuvjxmjkyrhrtjgvjbphkcumdtbpiqh
ymmamgvuzzsabpeqjailfdm

ymmamgvuzzsabpeqjailfdm
yhkncbxnkppsmuvjxmjkyrhrtjgvjbphkcumdtbpiqh
xhprssixxauetipchbv
vtdyqzwhorrhsdbmsivmkjywvqveozqjvtjlshviyosr
vdnyoqntoklhraixfdvcrzlkgvsacncxs
usrbhzasdlmbsduly
tumemvczbk
tflecxolxmgnil
tbimlmwoarnzmffuzfnybikhuhlviwidzsqngobjfqiuv
sfuiarujowqtnvodxaftz
rccyuvgtbyycvcnuuscfuziltagms
rbbxaogunbzkusueaycmhvvlwwdg
qerrixgqfax
ppckloqt
outduwlefinrdvpnbofrdmffvnvfjtt
ohqwtlitxvtjdrddqxftmjjxlrkrwzhngxlci
mpbhaeumlebgxlotvkjxaedqfvqblcuxrxfrbbfmi
meglsrvrickbosyxvqefsar
kvefczprbxuyposirzjuupfiszmmmkqxhwe
kkhcvkjrjcbyqixf
jxsdgicwbpssursc
jdnmekotqiiuhuocqveozqyuol
jdmewxsqfnbfdtwxoeisgiiufv
ekbbzrcpyvtmbajqxpzsiyixculqmgosqsurl

ppckloqt
tumemvczbk
qerrixgqfax
tflecxolxmgnil
jxsdgicwbpssursc
kkhcvkjrjcbyqixf
usrbhzasdlmbsduly
xhprssixxauetipchbv
sfuiarujowqtnvodxaftz
meglsrvrickbosyxvqefsar
ymmamgvuzzsabpeqjailfdm
jdmewxsqfnbfdtwxoeisgiiufv
jdnmekotqiiuhuocqveozqyuol
rbbxaogunbzkusueaycmhvvlwwdg
rccyuvgtbyycvcnuuscfuziltagms
outduwlefinrdvpnbofrdmffvnvfjtt
vdnyoqntoklhraixfdvcrzlkgvsacncxs
kvefczprbxuyposirzjuupfiszmmmkqxhwe
ekbbzrcpyvtmbajqxpzsiyixculqmgosqsurl
ohqwtlitxvtjdrddqxftmjjxlrkrwzhngxlci
mpbhaeumlebgxlotvkjxaedqfvqblcuxrxfrbbfmi
yhkncbxnkppsmuvjxmjkyrhrtjgvjbphkcumdtbpiqh
vtdyqzwhorrhsdbmsivmkjywvqveozqjvtjlshviyosr
tbimlmwoarnzmffuzfnybikhuhlviwidzsqngobjfqiuv

ppckloqt
qerrixgqfax
tumemvczbk
tflecxolxmgnil
usrbhzasdlmbsduly
jxsdgicwbpssursc
kkhcvkjrjcbyqixf
xhprssixxauetipchbv
outduwlefinrdvpnbofrdmffvnvfjtt
rccyuvgtbyycvcnuuscfuziltagms
sfuiarujowqtnvodxaftz
jdmewxsqfnbfdtwxoeisgiiufv
jdnmekotqiiuhuocqveozqyuol
meglsrvrickbosyxvqefsar
ymmamgvuzzsabpeqjailfdm
vtdyqzwhorrhsdbmsivmkjywvqveozqjvtjlshviyosr
ohqwtlitxvtjdrddqxftmjjxlrkrwzhngxlci
vdnyoqntoklhraixfdvcrzlkgvsacncxs
yhkncbxnkppsmuvjxmjkyrhrtjgvjbphkcumdtbpiqh
kvefczprbxuyposirzjuupfiszmmmkqxhwe
rbbxaogunbzkusueaycmhvvlwwdg
ekbbzrcpyvtmbajqxpzsiyixculqmgosqsurl
mpbhaeumlebgxlotvkjxaedqfvqblcuxrxfrbbfmi
tbimlmwoarnzmffuzfnybikhuhlviwidzsqngobjfqiuv
C 调试

评论

1赞 Shawn 10/21/2023
除非所有字符串的长度都相同,否则排序函数中的字符串不会像您所做的那样为每个字符串分配足够的空间。为什么不直接交换指针而不是它们的内容呢?strcpy()
0赞 Ted Lyngmo 10/21/2023
为什么不只是和反向功能?为什么预期的输出比输入长得多,并且不包括作为输入给出的所有字符串?return strcmp(a, b);return lexicographic_sort(b, a);
1赞 Ted Lyngmo 10/21/2023
另外:不要使用像 .用于明确您想要什么。97'a'
0赞 Aryan Mane 10/21/2023
@TedLyngmo输出更长,因为它打印了所有 4 种类型的排序。另外,您对指针的建议非常有帮助。
0赞 Ted Lyngmo 10/21/2023
“输出更长,因为它打印了所有 4 种类型的排序” - 啊哈,我的错:-)“你的指针建议......”——呃?我没有建议使用指针,是吗?

答: 暂无答案