12.填充

12.填充 - 蓝桥云课 (lanqiao.cn)

问题描述

有一个长度为n的01串,其中有一些位置标记为 ?,这些位置上可以任意填充0或者1,请问如何填充这些位置使得这个01串中出现互不重叠的00和11子串最多,输出子串个数

输入格式

输入一行包含一个字符串

输出格式

输出一行包含一个整数表示答案

样例输入

1110?0

样例输出

复制代码
import os
import sys

# 请在此输入您的代码
s=input()
n=len(s)
dp=[0]*n

for i in range(1,n):
  if s[i]==s[i-1] or s[i]=='?' or s[i-1]=='?': #如果当前位置的字符与前一个位置的字符相同,或者当前位置或前一个位置为问号(?)
    dp[i]=dp[i-2]+1  #i-2应该是因为要00/11 才算进子串数量
  else: #如果当前位置的字符与前一个位置的字符不相同,且当前位置和前一个位置都不是问号
    dp[i]=dp[i-1] #0,1变化,最长字串长度不发生变化,等于前一个长度
print(dp[-1])
相关推荐
不穿格子的程序员2 分钟前
从零开始学算法——链表篇3:合并两个有序链表 + 两数相加
数据结构·算法·链表·dummy
大连好光景16 分钟前
批量匿名数据重识别(debug记录)
开发语言·python
暴风鱼划水21 分钟前
算法题(Python)哈希表 | 2.两个数组的交集
python·算法·哈希表
清水白石00823 分钟前
《深入 Celery:用 Python 构建高可用任务队列的实战指南》
开发语言·python
fufu031126 分钟前
Linux环境下的C语言编程(四十二)
linux·c语言·算法
HalvmånEver29 分钟前
Linux : 基础IO(三)
linux·运维·算法
oushaojun231 分钟前
linux中backtrace实战
linux·运维·算法·backtrace
埃伊蟹黄面1 小时前
模拟算法思想
c++·算法·leetcode
BoBoZz191 小时前
Hello 隐式建模
python·vtk·图形渲染·图形处理
副露のmagic1 小时前
更弱智的算法学习day 10
python·学习·算法