给出一个只包含 0 和 1 的 01 串 s ,下标从 1 开始,设第 i 位的价值为 vali ,则价值定义如下:
- i=1时:val1 = 1
- i>1时:
2.1 若 si ≠ si-1 , vali = 1
2.2 若 si = si-1 , vali = vali-1 + 1
字符串的价值等于 val1 + val2 + val3 + … + valn
你可以删除 s 的任意个字符,问这个串的最大价值是多少。
import collections
n = int(input())
s = input()
dic = collections.Counter(s)
def f(c):
# 以'0'为例
# 第一个'0’和最后一个'0'出现的位置
start, end = s.find(c), s.rfind(c)
# 第一次计算:计算连续个'0'得到的value
num = (1 + dic[c]) * dic[c] // 2
# 第二次计算:计算start之前和end之后连续个'1'得到的value
num += (1 + start) * start // 2
num += (len(s) - end) * (len(s) - end - 1) // 2
return num
print(max(f('0'), f('1')))