链接
1513. 仅含 1 的子串数
题目
示例
说明
s[i] == '0'
或s[i] == '1'
1 <= s.length <= 10^5
思路
遍历字符串,以0为分隔符,统计每段连续1的个数,连续1的长度决定子集个数,公式为n(1+n)/2,将每一段的子集个数加起来即可。
C++ Code
class Solution {
public:
int numSub(string s) {
//以0位分割符 统计连续1的长度
long int count=0;
int i=0;
while(i<s.size())
{
while(i<s.size() && s[i]=='0') i++;
long int N=0;
while(i<s.size() && s[i]=='1')
{
i++; N++;
}
count+=(N+N*N)/2;
}
return count%(1000000007);
}
};