原题连接ios
题目大意:测试
给出一串由'R', 'G', 'B'组成的长度为n的字符串,在里面选出一个长度为k的子串,要求在改变最少字符的状况下同时也是"RGBRGBRGB…"的子串。spa
思路:
简单版本测试数据范围小,能够直接暴力。code
有三种匹配状况(分别以'R', 'G', 'B'开始),若是不匹配则改变次数+1,每次匹配完都更新一次最小值。blog
代码:ci
1 #include <iostream> 2 3 using namespace std; 4 5 int q, n, k, mmin; 6 char ori[3] = {'R', 'G', 'B'}; 7 char s[2002]; 8 9 int My_Min(int a, int b) 10 { 11 return a>b?b:a; 12 } 13 14 int main() 15 { 16 cin >> q; 17 18 for (int i = 1; i <= q; i++) 19 { 20 cin >> n >> k; 21 mmin = 20000; 22 for (int j = 1; j <= n; j++) 23 { 24 cin >> s[j]; 25 } 26 27 for (int j = 1; j <= n-k+1; j++) 28 { 29 int num[4] = {0}; 30 for (int t = 0; t < k; t++) 31 { 32 if (s[j+t] != ori[t%3]) 33 { 34 num[1]++; 35 } 36 if (s[j+t] != ori[(t+1)%3]) 37 { 38 num[2]++; 39 } 40 if (s[j+t] != ori[(t+2)%3]) 41 { 42 num[3]++; 43 } 44 } 45 mmin = My_Min(My_Min(mmin, num[1]), My_Min(num[2], num[3])); 46 } 47 cout << mmin << endl; 48 } 49 return 0; 50 }