LeetCode1513. 仅含 1 的子串数

题目: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;
    }
}
©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页