首页 > 后端开发 > php教程 > 计算构建良好弦乐的方法

计算构建良好弦乐的方法

Patricia Arquette
发布: 2025-01-02 15:13:40
原创
389 人浏览过

Count Ways To Build Good Strings

2466。计算构建良好弦乐的方法

难度:中等

主题:动态规划

给定整数零、一、低和高,我们可以通过从空字符串开始构造一个字符串,然后在每一步执行以下任一操作:

  • 将字符“0”附加零次。
  • 追加字符“1”一次。

此操作可以执行任意多次。

good字符串是由上述过程构造的字符串,其长度在低和高之间(包含)。

返回可以构造满足这些属性的不同好字符串的数量。由于答案可能很大,因此返回 109 7.

示例1:

  • 输入:低= 3,高= 3,零= 1,一= 1
  • 输出: 8
  • 说明:
    • 一个可能的有效好字符串是“011”。
    • 它可以构造如下:"" -> “0”-> “01”-> “011”。
    • 本例中从“000”到“111”的所有二进制字符串都是好的字符串。

示例2:

  • 输入:低= 2,高= 3,零= 1,一= 2
  • 输出: 5
  • 解释: 好的字符串是“00”、“11”、“000”、“110”和“011”。

约束:

  • 1 5
  • 1

提示:

  1. 计算长度小于或等于某个常数x的好字符串的数量。
  2. 使用连续零和一的组大小来应用动态规划。

解决方案:

我们需要专注于构造不同长度的字符串并统计满足给定条件的有效字符串的数量。让我们分解一下方法:

问题分解

  1. 状态定义:
    让 dp[i] 表示可以使用提供的零和一值构造的长度为 i 的有效字符串的数量。

  2. 递归关系:

    • 对于任意长度 i,我们可以附加:
      • 零个连续的 0,因此前一个字符串的长度将是 i-0,我们将添加 dp[i-zero] 方式。
      • 连续一个 1,因此前一个字符串的长度将为 i-one,我们将添加 dp[i-one] 方式。

递推关系变为:
dp[i] = dp[i - 0] dpi - 1

  1. 基本情况:

    • 构造空字符串的方法只有一种:dp[0] = 1。
  2. 最终计算:

    • 长度在low和high之间的有效字符串总数是所有i从low到high的dp[i]之和。

解决步骤

  1. 初始化一个大小为高1的dp数组,其中每个索引i代表长度为i的有效字符串的数量。
  2. 从 1 到 high 循环遍历每个可能的长度 i,根据递推关系更新 dp[i]。
  3. 从低到高计算dp[i]的总和,得到最终结果。

让我们用 PHP 实现这个解决方案:2466。计算构建良好弦乐的方法

<?php
function countGoodStrings($low, $high, $zero, $one) {
    ...
    ...
    ...
    /**
     * go to ./solution.php
     */
}

// Example Usage
$low = 3;
$high = 3;
$zero = 1;
$one = 1;
echo countGoodStrings($low, $high, $zero, $one); // Output: 8

$low = 2;
$high = 3;
$zero = 1;
$one = 2;
echo countGoodStrings($low, $high, $zero, $one); // Output: 5
?>
登录后复制

解释:

  1. 初始化:我们首先设置基本情况 dp[0] = 1,这意味着有一种方法可以形成长度为 0 的字符串(空字符串)。
  2. 动态编程更新: 对于从 1 到高的每个可能的字符串长度 i,我们检查是否可以将长度为零或一的字符串附加到较小的字符串。我们通过添加形成长度为 i-0 和 i-1 的字符串的方式数来相应地更新 dp[i],确保结果取模 109 7.
  3. 最终结果计算: 我们将 i 在 [low, high] 范围内的 dp[i] 的所有值相加,得到有效字符串的最终计数。

时间复杂度:

  • 填充 dp 数组需要 O(high)。
  • 将低值和高值之间的有效结果相加需要 O(high - low 1)。

因此,整体时间复杂度为 ** O(high) **,这对于输入限制而言足够高效。

空间复杂度:

  • 我们使用大小为 high 1 的数组 dp,因此空间复杂度为 O(high).

这个解决方案有效地解决了约束范围内的问题。

联系链接

如果您发现本系列有帮助,请考虑在 GitHub 上给 存储库 一个星号或在您最喜欢的社交网络上分享该帖子?。您的支持对我来说意义重大!

如果您想要更多类似的有用内容,请随时关注我:

  • 领英
  • GitHub

以上是计算构建良好弦乐的方法的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板