仅含1的子串数
题目概述
给你一个二进制字符串 s(仅由 ‘0’ 和 ‘1’ 组成的字符串)。
返回所有字符都为 1 的子字符串的数目。
由于答案可能很大,请你将它对 10^9 + 7 取模后返回。
示例1
输入:s = “0110111”
输出:9
解释:共有 9 个子字符串仅由 ‘1’ 组成
“1” -> 5 次
“11” -> 3 次
“111” -> 1 次
解题方法
-
找到连续为1的字符串的长度;
-
通过长度计算出字符串组合的数目;
-
依次遍历求和,得出最终结果;
代码实现
class Solution {
public int numSub(String s) {
final int max = (int)Math.pow(10,9)+7;
long temp = 0;
long top = 0;
for(int i=0;i<s.length();i++){
char n = s.charAt(i);
if(n == '0'){
temp+=(top)*(top+1)/2;
temp%=max;
top = 0;
}else{
top++;
}
}
temp+=(top)*(top+1)/2;
temp%=max;
return (int)temp;
}
}