我正在尝试解决这个问题,尽管使用蛮力我能够解决它,但是下面的优化算法给我一些测试用例的错误结果。我试过但无法;找不到代码的问题可以任何机构帮我。
问题: 给定一个字符串 S 和整数 K,找到整数 C,它等于子字符串对 (S1,S2) 的数量,使得 S1 和 S2 具有相等的长度并且 Mismatch(S1, S2) <= K 其中 mismatch 函数定义如下。
失配函数
Mismatch(s1,s2) 是 S1 和 S2 中的字符不同的位置数。例如 mismatch(bag,boy) = 2 (第二和第三位置不匹配),mismatch(cat,cow) = 2(再次,第二和第三位置不匹配), Mismatch(London, Mumbai) = 6(因为两个字符串中每个位置的字符都不同)。伦敦的第一个字符是“L”,而孟买的字符是“M”,伦敦的第二个字符是“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