leetcode - 838. 推多米诺
题目
代码
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
string pushDominoes(string dominoes) {
int n = dominoes.size();
queue<int> q;
vector<int> time(n, -1);
vector<string> force(n);
for(int i = 0; i < n; i++){
if(dominoes[i] != '.'){
q.push(i);
time[i] = 0;
force[i].push_back(dominoes[i]);
}
}
string res(n, '.');
while(!q.empty()){
int i = q.front();
q.pop();
if(force[i].size() == 1){
char f = force[i][0];
res[i] = f;
int ni = (f == 'L') ? (i-1) : (i+1);
if(ni >=0 && ni < n){
int t = time[i];
if(time[ni] == -1){
q.push(ni);
time[ni] = t+1;
force[ni].push_back(f);
}else if(time[ni] == t+1){
force[ni].push_back(f);
}
}
}
}
return res;
}
string pushDominoes2(string dominoes) {
int n = dominoes.size(), i = 0;
char left = 'L';
while (i < n) {
int j = i;
while (j < n && dominoes[j] == '.') {
j++;
}
char right = j < n ? dominoes[j] : 'R';
if (left == right) {
while (i < j) {
dominoes[i++] = right;
}
} else if (left == 'R' && right == 'L') {
int k = j - 1;
while (i < k) {
dominoes[i++] = 'R';
dominoes[k--] = 'L';
}
}
left = right;
i = j + 1;
}
return dominoes;
}
int main(){
string res;
string dominoes;
cin>>dominoes;
res = pushDominoes(dominoes);
cout<<res;
return 0;
}