Push Dominoes 推多米诺

一行中有 N 张多米诺骨牌,我们将每张多米诺骨牌垂直竖立。

在开始时,我们同时把一些多米诺骨牌向左或向右推。

每过一秒,倒向左边的多米诺骨牌会推动其左侧相邻的多米诺骨牌。

同样地,倒向右边的多米诺骨牌也会推动竖立在其右侧的相邻多米诺骨牌。

如果同时有多米诺骨牌落在一张垂直竖立的多米诺骨牌的两边,由于受力平衡, 该骨牌仍然保持不变。

就这个问题而言,我们会认为正在下降的多米诺骨牌不会对其它正在下降或已经下降的多米诺骨牌施加额外的力。

给定表示初始状态的字符串 "S" 。如果第 i 张多米诺骨牌被推向左边,则 S[i] = 'L';如果第 i 张多米诺骨牌被推向右边,则 S[i] = 'R';如果第 i 张多米诺骨牌没有被推动,则 S[i] = '.'

返回表示最终状态的字符串。

示例 1

输入:".L.R...LR..L.."
输出:"LL.RR.LLRRLL.."

示例 2

输入:"RR.L"
输出:"RR.L"
说明:第一张多米诺骨牌没有给第二张施加额外的力。

提示:

  1. 0 <= N <= 10^5
  2. 表示多米诺骨牌状态的字符串只含有 'L''R'; 以及 '.';
思路:遍历一次数组,用res存储答案,如果当前字符是'.',那么跳过,如果当前字符是'R',判断上一次字符last

是什么,如果last是'R',那么就把last~当前字符全部赋值为R,如果last是'L',那么赋值第一个为'L',最后一个为'R',中间赋值为'.',对于当前字符是'L',也是同理。

class Solution {
public:
    string pushDominoes(string dominoes) {
	char last[1] = "";
	int n = dominoes.size();
	string res = "";
	for (int i = 0, j = 0; j < n; j++) {
		if (dominoes[j] == '.') continue;
		if (dominoes[j] == 'L') {
			if (last[0] == 'R') {				
				res += string((j - i) / 2 , 'R') + string((j - i) % 2 , '.') + string((j - i) / 2 , 'L')+'L';
			}
			else {
				res += string((j - i + 1),'L');
			}
			last[0] = 'L';
		}
		else if (dominoes[j] == 'R') {
			if (last[0] == 'R') {
                                res += string((j - i + 1),'R');				
			}
			else {
				res += string((j - i),'.') + 'R';
			}
			last[0] = 'R';
		}
		i = j + 1;
	}
	if (last[0] == 'R') {
		res += string((n - res.size()),'R');
	}
	else {
		res += string((n - res.size()),'.');
	}
	return res;     
    }
};



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值