最近小码哥爱上二进制,他特别喜欢全是1的二进制串,但通常会有0。
于是他给你一个二进制字符串,问你字符都为1的子串的个数(结果对109+7109+7取模)
格式
输入格式:
一个二进制字符串
输出格式:
所有字符都为1 的子串个数
样例 1
输入:
0110111
复制
输出:
9
复制
样例 2
输入:
101
复制
输出:
2
复制
样例 3
输入:
111111
复制
输出:
21
复制
备注
s[ i ] == ‘ 0 ‘或 s[ i ] == ‘ 1 ‘
1≤s.length≤1051≤s.length≤105
一段连续为1的长度为n的字符串可以产生n*(n+1)/2个子串。
我们统计每一个连续1的个数,然后遇到下一个的时候更新数据
s = input()
l=0
ans = 0
mod = 10**9 +7
for i in range(len(s)):
if s[i] == '1':
l += 1
if (s[i] == '0') or (i == len(s) - 1 ):
ans = (ans + (1 + l)*l // 2)%mod
l = 0
print(ans)
该问题是一个编程挑战,要求计算给定二进制字符串中所有字符都为1的子串数量。通过遍历字符串,统计连续1的个数,并在遇到0或字符串结束时应用公式计算子串数量,结果对10^9+7取模。给出的示例展示了如何处理不同情况。
&spm=1001.2101.3001.5002&articleId=129602608&d=1&t=3&u=96ffa7b1565b48deafcc0bb13fad9ba4)

被折叠的 条评论
为什么被折叠?



