• 1987. 不同的好子序列数目


    1987. 不同的好子序列数目

    给你一个二进制字符串 binarybinary 的一个 子序列 如果是 非空 的且没有 前导 0 (除非数字是 "0" 本身),那么它就是一个 的子序列。

    请你找到 binary 不同好子序列 的数目。

    • 比方说,如果 binary = "001" ,那么所有 子序列为 ["0", "0", "1"] ,所以 不同 的好子序列为 "0""1" 。 注意,子序列 "00""01""001" 不是好的,因为它们有前导 0 。

    请你返回 binary不同好子序列 的数目。由于答案可能很大,请将它对 109 + 7 取余 后返回。

    一个 子序列 指的是从原数组中删除若干个(可以一个也不删除)元素后,不改变剩余元素顺序得到的序列。

    示例 1:

    输入:binary = "001"
    输出:2
    解释:好的二进制子序列为 ["0", "0", "1"] 。
    不同的好子序列为 "0" 和 "1" 。
    

    示例 2:

    输入:binary = "11"
    输出:2
    解释:好的二进制子序列为 ["1", "1", "11"] 。
    不同的好子序列为 "1" 和 "11" 。
    

    示例 3:

    输入:binary = "101"
    输出:5
    解释:好的二进制子序列为 ["1", "0", "1", "10", "11", "101"] 。
    不同的好子序列为 "0" ,"1" ,"10" ,"11" 和 "101" 。
    

    提示:

    • 1 <= binary.length <= 105
    • binary 只含有 '0''1'
     class Solution {
            int mod = (int) (1e9 + 7);
    
            public int numberOfUniqueGoodSubsequences(String binary) {
                char[] chars = binary.toCharArray();
                int n = chars.length;
                int dp0 = 0, dp1 = 0, zero = 0;
                for (int i = n - 1; i >= 0; i--) {
                    if (chars[i] == '0') {
                        zero = 1;
                        dp0 = (dp0 + dp1 + 1) % mod;
                    } else {
                        dp1 = (dp0 + dp1 + 1) % mod;
                    }
                }
                return (dp1 + zero) % mod;
            }
        }
    
  • 相关阅读:
    ajax提交json数据到后端C#解析
    icheck判断是否选中
    sql多列值一行显示
    IDEA 2018 搭建 Spring MVC helloworld
    C# 注册DLL至GAC 并在添加引用中使用该DLL
    Java获取执行进程的dump文件及获取Java stack
    intellij idea搭建SpringBoot
    通过链接跳转登录到另外一个系统
    访问Hsql .data数据库文件
    基于weui的城市选择器(city-picker)
  • 原文地址:https://www.cnblogs.com/smakslow/p/15204181.html
Copyright © 2020-2023  润新知