これは、次の問題を解決するためのプログラムです。「2つの文字列が与えられ、同じ長さであってもなくても、必要な文字削除の最小数どちらの文字列からも任意の文字を削除することができます "。結局、両方の文字列は同じ文字と同じ文字を持つはずです。たとえば、文字列A = ccda String B = dcac 私のロジックは、両方の文字列で同じ文字をダミー文字列 "0"と置き換えることです。だから私は "0"と等しくない各文字列の文字の数を数えると、それは私に削除の数を与える。 しかし、これがなぜ特定のケースで失敗するのかわかりません。それが失敗したテストケースのAnagram - 削除に失敗したテストケースの最小数
#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
を誰もがここでエラー私をポイントしてくださいことができます。どうもありがとうございました!
今、デバッガの使い方を学ぶのに最適な時期です。デバッガを使用すると、変数とその値を監視しながら、コードを1行ずつ進めることができます。失敗した入力に対してこれを行い、あなたのプログラムで何が起こるかを見てください。 –
@Someprogrammerdudeありがとうございました:) –