这是一个解决以下问题的程序"给定两个字符串,并且可能长度相同或不同,确定制作和字谜所需的最小字符删除次数。任何字符都可以从任何字符串中删除"。最后,两个字符串应该具有相同的字母和每个字母的相同频率。例如,字符串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
任何人都可以在这里指出错误。请提前谢谢!
答案 0 :(得分:0)
您的代码出错 - 第二次循环中的条件无效。
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]
。
轻微的挑剔:因为你正在学习编码,所以试着去找几个有用的习惯。代码应该很漂亮(不是很漂亮,请注意,但是提升) - 它有助于简化您和其他人的阅读。后果很重要。如果你在运营商周围做空间,那就到处做。布局很重要。所有这些都会帮助你注意到你的(对于专业人士来说很常见,他们只是发现它很快)错误。 在运行性能方面也有更好的算法。 :)