列表

详情


NC221824. RedandBlueandGreen

描述

小红拿到了一个只含有'R'、'B'、'G'三种字符的、长度为n的字符串。
她每次可以选择一个字母改变字母的值(改变的值也必须是'R'、'B'、'G'中的一种)。
小红想进行不超过 次操作,操作结束后字符串不存在相邻两个相等的相同字母。
你能帮帮小红吗?只用输出任意一种可行解即可,不需要把操作数最小化。

输入描述

第一行一个正整数  ,代表字符串的长度。
第二行为一个只含有'R'、'B'、'G'这三种字符的字符串。

输出描述

请输出小红操作后的字符串。请务必保证操作次数不超过 。有多种解法的话输出任意即可。

示例1

输入:

5
GBGGB

输出:

GBGRB

说明:

只需要把第四个字符改成R即可。

示例2

输入:

6
BBBBBB

输出:

RBRBGB

说明:

修改了第一个、第三个、第五个字符。

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(clang++11) 解法, 执行用时: 9ms, 内存消耗: 808K, 提交时间: 2021-05-16 19:56:58

#include<bits/stdc++.h>
using namespace std;
int main(){
    int n; string s;string ss = "RBG" ; 
    cin >> n; cin >> s;
    for(int i = 0; i < s.size(); i++) {
        while(s[i]==s[i+1]) s[i+1]=ss[rand()%3];
    }
    cout << s ;
    return 0;
} 

Python3(3.9) 解法, 执行用时: 82ms, 内存消耗: 6928K, 提交时间: 2021-05-14 20:59:43

n = int(input())
s = list(input())
d = {'R','G','B'}
for i in range(1,n,2):
    s[i] = list(d-{s[i-1]} - ({s[i+1]} if i+1 < n else set()))[0]
print(''.join(s))

上一题