ブルートフォースを使用して解決できましたが、この問題を解決しようとしていますが、次の最適化されたアルゴリズムでは、一部のテストケースで誤った結果が得られます。試してみましたが、コードの問題を見つけることができませんでした助けて。
問題 : 文字列 S と整数 K が与えられたとき、S1 と S2 の長さが等しく、Mismatch(S1, S2) <= K である部分文字列 (S1,S2) のペアの数に等しい整数 C を見つけます。ここで、不一致関数は次のとおりです。を以下に定義します。
ミスマッチ関数
Mismatch(s1,s2) は、S1 と S2 の文字が異なる位置の数です。たとえば、mismatch(bag,boy) = 2 (2 番目と 3 番目の位置に不一致があります)、mismatch(cat,cow) = 2 (2 番目と 3 番目の位置に不一致があります)、Mismatch(London, Mumbai) = 6 (2 つの文字列のすべての位置の文字が異なるため)。ロンドンの最初の文字は「L」ですが、ムンバイでは「M」です。ロンドンの 2 番目の文字は「o」ですが、ムンバイでは「u」です。
int main() {
int k;
char str[6000];
cin>>k;
cin>>str;
int len=strlen(str);
int i,j,x,l,m,mismatch,count,r;
count=0;
for(i=0;i<len-1;i++)
for(j=i+1;j<len;j++)
{ mismatch=0;
for(r=0;r<len-j+i;r++)
{
if(str[i+r]!=str[j+r])
{ ++mismatch;
if(mismatch>=k)break;
}
if(mismatch<=k)++count;
}
}
cout<<count;
return 0;
}
サンプル テスト ケース
テスト ケース (上記のコードに合格)
**input** 0 abab **output** 3
テスト ケース (上記のコードで失敗)
**input** 3 hjdiaceidjafcchdhjacdjjhadjigfhgchadjjjbhcdgffibeh **expected output** 4034 **my output** 4335