我尝试使用暴力方法解决这个问题,但是以下优化算法对某些测试用例给出了错误的结果。我已经尝试过,但无法找到代码中的问题,有人能帮我吗。
问题:给定一个字符串S和整数K,找到整数C,它等于拥有相同长度且Mismatch(S1,S2)≤K的子字符串对(S1,S2)的数量,其中mismatch函数定义如下。
mismatch函数
mismatch(s1,s2)是S1和S2中字符不同的位置数。例如,mismatch(bag,boy)=2(第二个和第三个位置存在不匹配),mismatch(cat,cow)=2(同样,在第二个和第三个位置存在不匹配),Mismatch(London,Mumbai)=6(因为两个字符串在每个位置上的字符都不同)。London的第一个字符是'L',而Mumbai的第一个字符是'M',London的第二个字符是'o',而Mumbai的第二个字符是'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;
}
示例测试用例
Test case (passing for above code)
**input** 0 abab **output** 3
Test case (failing for above code)
**input** 3 hjdiaceidjafcchdhjacdjjhadjigfhgchadjjjbhcdgffibeh **expected output** 4034 **my output** 4335