分析:数据的范围较小,可直接遍历整个母串,记录下每次的最小值,选出最小值即可
代码如下,比较容易看懂
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
using namespace std;
const int maxn=1e9;
int main()
{
int q;
scanf("%d",&q);
char s[3]={'R','G','B'};
while(q--)
{
char a[20005];
int n,k;
int ans=maxn;
int ant;
scanf("%d%d",&n,&k);
scanf("%s",a);
for(int i=0;i<n-k+1;i++)
{
ant=maxn;
int s1=0,s2=0,s3=0;
for(int j=0;j<k;j++)
{
if(a[i+j]!=s[j%3])//RGB
s1++;
if(a[i+j]!=s[(j+1)%3])//GBR
s2++;
if(a[i+j]!=s[(j+2)%3]) //RBG
s3++;
// printf("s1 %d s2 %d s3 %d\n",s1,s2,s3);
}
ant=min(min(s1,s2),s3);
ans=min(ans,ant);
}
printf("%d",ans);
if(q)
printf("\n");
}
return 0;
}