题目:1513. 仅含 1 的子串数
给你一个二进制字符串 s(仅由 ‘0’ 和 ‘1’ 组成的字符串)。
返回所有字符都为 1 的子字符串的数目。由于答案可能很大,
请你将它对 10^9 + 7 取模后返回。
原题链接:https://leetcode-cn.com/problems/number-of-substrings-with-only-1s/
思路:动态规划
字符串"11"和"111"的子串分别是:
“11” “111”
1 11
11 111
1
可以看出来"i+1"的子串就是“i”的所有子串+1形成新的子串
动态方程就是 dp[i]=dp[i-1]+1;
class Solution {
public int numSub(String s) {
int len=s.length();
if(len==0)
return 0;
int []dp=new int[len+1];
dp[0]=s.charAt(0)-'0';
int ans=dp[0];
for(int i=1;i<len;i++)
{
if(s.charAt(i)=='1')
{
dp[i]=(dp[i-1]+1)%1000000007;
ans=(ans+dp[i])%1000000007;
}
}
return ans;
}
}