Given a binary string`s`

(a string consisting only of '0' and '1's). Return the number of substrings with all characters 1's. Since the answer may be too large, return it modulo 10^9 + 7.Example 1:Input:s = "0110111"Output:9Explanation:There are 9 substring in total with only 1's characters. "1" -> 5 times. "11" -> 3 times. "111" -> 1 time.

It first appeared in Leetcode Weekly Contest 197. The key is to notice that, given a string of `'1'`

s with length `n`

, the number of substrings containing all `'1'`

s – a_n – is a arithmetic sequence.

With that being said, there are **two** different ways of implementing it.

#### Arithmetic sequence sum

We can count all of the substring of `'1'`

s and use the arithmetic sequence sum formula.

class Solution: def numSub(self, s: str) -> int: ret = l = 0 for i in range(len(s)): if s[i] == '1': l += 1 else: ret += l*(l+1)//2 l = 0 if l: ret += l*(l+1)//2 return ret % (10**9 + 7)

#### Accumulatively

Or, credit to @lee215, we can maintain a `count`

for the current number of continuous `'1'`

s. When a new `'1'`

appears, there will be `count`

more substrings as shown below.

class Solution: def numSub(self, s: str) -> int: ret = l = 0 for i in range(len(s)): if s[i] == '1': l += 1 ret += l else: l = 0 return ret % (10**9 + 7)