最近小码哥爱上二进制,他特别喜欢全是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)