838. 推多米诺
可以通过模拟来做,每次遍历 替换某些点,直到一次遍历之后没有元素被替换
但是通过双指针来做更快
'R......R' => 'RRRRRRRR'
'R......L' => 'RRRRLLLL' or 'RRRR.LLLL'
'L......R' => 'L......R'
'L......L' => 'LLLLLLLL'
class Solution:
def pushDominoes(self, dominoes: str) -> str:
dominoes = 'L'+dominoes+'R'
n = len(dominoes)
res = []
left = 0
for right in range(1,n):
if dominoes[right] == '.':
continue
mid = right - left - 1
if left:
res.append(dominoes[left])
if dominoes[left] == dominoes[right]:
res.append(dominoes[left] * mid)
elif dominoes[left] == 'L' and dominoes[right] == 'R':
res.append('.' * mid)
else:
res.append('R' * (mid // 2) + '.' * (mid % 2) + 'L' * (mid // 2))
left = right
return "".join(res)
1529. 最少的后缀翻转次数
由于每次翻转是由某一位到最后所有的元素都翻转,
所以可以从头开始比较 若最开始相同 那么则要翻转一次,
然后依次判断其下一位元素是否相同,若不相同,则下次需要将其翻转回来
按照此方法从左到右依次翻转过去
class Solution:
def minFlips(self, target: str) -> int:
res =int(target[0])
for i in range(len(target)-1):
if target[i] !=target[i+1]:
res+=1
return res