题意 :
- 由’?’ ‘B’ ‘R’组成的字符串,将所有’?‘变成’B’或者’R’,要求出现’BB’和’RR’数量最少,求最终字符串。
思路 :
- 找到第一个不是’?‘的字符(这里有一个注意点,全是’?'的情况),往左往右。
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <vector>
#include <unordered_map>
#include <unordered_set>
#include <set>
#include <map>
#define endl '\n'
#define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0)
using namespace std;
const double pi = acos(-1);
typedef long long ll;
void solve()
{
int n;
string s;
cin >> n >> s;
int p1 = -1;
for (int i = 0; i < s.size(); i ++ )
if (s[i] != '?')
{
p1 = i;
break;
}
if (p1 == -1)
{
char c = 'B';
for (int i = 0; i < s.size(); i ++ )
{
cout << c;
if (c == 'B') c = 'R';
else c = 'B';
}
cout << endl;
return ;
}
for (int i = p1; i >= 0; i -- )
{
if (s[i] == '?')
{
if (s[i + 1] == 'B') s[i] = 'R';
else s[i] = 'B';
}
}
for (int i = p1; i < s.size(); i ++ )
{
if (s[i] == '?')
{
if (s[i - 1] == 'B') s[i] = 'R';
else s[i] = 'B';
}
}
cout << s << endl;
}
int main()
{
IOS;
int T;
cin >> T;
while (T -- )
{
solve();
}
return 0;
}