CodeForce-1196D1-RGB Substring (easy version)

原题链接

题目大意:

给出一串由'R', 'G', 'B'组成的长度为n的字符串,在里面选出一个长度为k的子串,要求在改变最少字符的情况下同时也是"RGBRGBRGB…"的子串。

 

思路:
简单版本测试数据范围小,可以直接暴力。

有三种匹配情况(分别以'R', 'G', 'B'开始),如果不匹配则改变次数+1,每次匹配完都更新一次最小值。

 

代码:

 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 }

 

转载于:https://www.cnblogs.com/liyishan/p/11257520.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值