【发布时间】:2017-12-08 15:20:42
【问题描述】:
这是一个解决以下问题的程序“给定两个字符串,and ,长度可能相同也可能不同,确定生成和变位词所需的最小字符删除数。任何字符都可以从任何一个字符串”。最后,两个字符串应该具有相同的字母和每个字母的相同频率。例如,字符串 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
谁能在这里指出错误。请提前致谢!
【问题讨论】:
-
现在是学习如何使用调试器的最佳时机。使用调试器,您可以逐行执行代码,同时监视变量及其值。对失败的输入执行此操作,看看你的程序会发生什么。
-
@Someprogrammerdude 谢谢 :)