紅和綠

題目描述

牛牛有一些排成一行的正方形。每個正方形已經被染成紅色或者綠色。牛牛現在可以選擇任意一個正方形然後用這兩種顏色的任意一種進行染色,這個正方形的顏色將會被覆蓋。牛牛的目標是在完成染色之後,每個紅色R都比每個綠色G距離最左側近。牛牛想知道他最少需要塗染幾個正方形。

如樣例所示: s = RGRGR

我們塗染之後變成RRRGG滿足要求了,塗染的個數爲2,沒有比這個更好的塗染方案。

輸入描述:

輸入包括一個字符串s,字符串s長度length(1 ≤ length ≤ 50),其中只包括'R'或者'G',分別表示紅色和綠色。

輸出描述:

輸出一個整數,表示牛牛最少需要塗染的正方形數量

示例1

輸入

RGRGR

輸出

2

 

推斷後有三種情況:

1.染成全紅

2.染成全綠

3.第i個前的G全染爲紅,第i個後的R全染爲綠

 

#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;

int main()
{
    string str;
    cin >> str;
    vector<int> RG(str.size());
    int cnt = 0;
    int rcnt = 0;
    int gcnt = 0;
    for(int i = 0; i < str.size(); i++)
    {
        if(str[i] == 'G')
        {
            cnt++;
            gcnt++;
        }
        RG[i] = cnt;
    }
    cnt = 0;
    for(int i = str.size() - 1; i >= 0; i--)
    {
        RG[i] += cnt;
        if(str[i] == 'R')
        {
            cnt++;
            rcnt++;
        }
    }
    sort(RG.begin(), RG.end());
    cout << min(RG[0], min(rcnt, gcnt)) << endl;
    return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章