题解 | #红和绿#
红和绿
https://www.nowcoder.com/practice/69606208a7734ae0895724cfb951aef8
###这种动态更新的精髓在于,按照要求对于R从左边更新,但是记录这个更新次数的数组的维度需要比原字符串的维度大1,因为在最开始或者最后的0代表着开始,那么针对第一个字符元素,字符是[0]
但是记录的次数的这个数组就是[1]了。
###这里不能使用numpy库,否则可以使用arrR=np.zeros(n+1),但是一定要注意利用np.zeros创建的0数组是一个array格式,并且这个数值是float形式。0.0
def color_count(str):
n=len(str)
arrR=[0]*(n+1)
arrG=[0]*(n+1)
for i in range(n):
if str[i]=='R':
arrR[i+1]=arrR[i]
else:
arrR[i+1]=arrR[i]+1
for j in range(n-1,-1,-1):
if str[j]=='G':
arrG[j]=arrG[j+1]
else:
arrG[j]=arrG[j+1]+1
min_count=n ###这个就是首先给定一个初始值,就是全部都要变,给定一个n
# 最优解肯定是最在一个分界点使得左边都是R右边都是G
# 遍历分割点
for i in range(n+1):
count=arrR[i]+arrG[i]
min_count=min(min_count,count)
return min_count
import sys
str=input()
print(int(color_count(str)))