gpt4 book ai didi

c - Anagram - 最小删除数量 - 某些测试用例失败

转载 作者:行者123 更新时间:2023-11-30 16:43:50 27 4
gpt4 key购买 nike

这是一个解决以下问题的程序:“给定两个字符串 和 ,其长度可能相同也可能不同,确定制作 和 字谜所需的最小字符删除数。可以从其中删除任何字符任一字符串”。最后,两个字符串应该具有相同的字母,并且每个字母的频率相同。例如,字符串 A = ccda 字符串 B = dcac我的逻辑是用虚拟字符串“0”替换两个字符串中相同的字母。因此,当我计算每个字符串中不等于“0”的字母数时,它会给出删除的次数。但我不知道为什么在某些情况下会失败。

#include <math.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
#include <limits.h>
#include <stdbool.h>

int main(){
int count =0;
const char dummy= '0';
int i =0, j=0;
char* a = (char *)malloc(512000 * sizeof(char));
scanf("%s",a);
char* b = (char *)malloc(512000 * sizeof(char));
scanf("%s",b);
for (i=0;a[i]!= '\0' ;i++){
for(j=0; b[j]!= '\0';j++){
if (a[i]==b[j]){
a[i]= dummy;
b[j]= dummy;
}

}
}
for (i=0;a[i]!= '\0' ;i++){
if(a[i]!= dummy){
count = count+1;
}
}
for (i=0;a[i]!= '\0' ;i++){
if(b[i]!= dummy){
count = count+1;
}
}
printf("%d",count);
return 0;
}

失败的测试用例之一是字符串 A:fcrxzwscanmligyxyvym字符串 B:jxwtrhvujlmrpdoqbisbwhmgpmeoke给出的结果:22预期结果:30

任何人都可以指出我这里的错误吗?请提前致谢!

最佳答案

您的代码中有错误 - 第二个循环中的条件无效。

for (i=0;a[i]!= '\0' ;i++){
if(a[i]!= dummy){
count = count+1;
}
}
for (i=0;a[i]!= '\0' ;i++){
^^^^
if(b[i]!= dummy){
count = count+1;
}
}

标记点应该是b[i]而不是a[i]

小毛病:既然你正在学习编码,那就试着在学习过程中养成一些有用的习惯。代码应该很漂亮(请注意,不是很漂亮,而是简洁)——它有助于您和其他人轻松阅读。后果很重要。如果您在运算符周围留有空格,请在任何地方都这样做。布局很重要。所有这些都会帮助您注意到您的错误(这对专业人士来说也是常见的,他们只是更快发现)。在运行性能方面也有更好的算法。 :)

关于c - Anagram - 最小删除数量 - 某些测试用例失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44918046/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com