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: 9 Explanation: There are 9 substring in total with only 1's characters. "1" -> 5 times. "11" -> 3 times. "111" -> 1 time.
Example 2:
Input: s = "101" Output: 2 Explanation: Substring "1" is shown 2 times in s.
Example 3:
Input: s = "111111" Output: 21 Explanation: Each substring contains only 1's characters.
Example 4:
Input: s = "000" Output: 0
Constraints:
s[i] == '0'
ors[i] == '1'
1 <= s.length <= 10^5
算法解析:
0110111
第一段1: 2 子串数: 2 * (2 + 1)/2 = 3
第二段1: 3 子串数: 3 * ( 3 + 1) / 2 = 6
总个数: 3 + 6 = 9
代码如下:
class Solution {
public:
int numSub(string s) {
int res = 0;
for(int i = 0; i < s.size(); i++)
{
if(s[i] != '0')
{
int j = i + 1;
while(j < s.size() && s[j] == '1') j++;
int c = j - i;
res = (res + c * (c + 1ll)/2) % (1000000007);
i = j - 1;
}
}
return res;
}
};