解题思路
新建矩阵f[n][3]
f[i][0] 为第i片叶子为’ryr’中的第一个r时,前面叶子一共需要的交换次数;
f[i][1]为第i片叶子为’ryr’中的’y’时,前面叶子一共需要的交换次数;此时需考虑前面是y还是r
f[i][2] 为第i片叶子为’ryr’中的第二个r时,前面叶子一共需要的交换次数;此时也需考虑前面是y还是r
代码
class Solution:
def minimumOperations(self, leaves: str) -> int:
n=len(leaves)
f=[[0 for i in range(3)] for j in range(n)]
if leaves[0]=='r':
f[0][0]=0
else:
f[0][0]=1
for i in range(1,n):
if leaves[i]=='r':
f[i][0]=f[i-1][0]
f[i][1]=f[i-1][0]+1
if i>1:
f[i][1]=min(f[i][1],f[i-1][1]+1)
f[i][2]=f[i-1][1]
if i>2:
f[i][2]=min(f[i][2],f[i-1][2])
else: ## 'y'
f[i][0]=f[i-1][0]+1
f[i][1]=f[i-1][0]
if i>1:
f[i][1]=min(f[i][1],f[i-1][1])
f[i][2]=f[i-1][1]+1
if i>2:
f[i][2]=min(f[i][2],f[i-1][2]+1)
return f[n-1][2]