在最小的移动中将字符串转换为好字符串



给定一个字符串 S 为 0 和 1,我们需要将其转换为一个好的字符串。字符串称为良好当且仅当:

没有两个或多个 0 或 1 在一起。这意味着 001 不好,但 010 是一个很好的字符串。

现在我们可以交换 S 中任意两个索引的位置。设从位置 i 交换与位置 j (i≠j) 的成本为 C(i,j)。

现在我们有两种类型的成本计算:

  1. C(i,j)=|j−i|
  2. C(i,j)=|j−i|*|j−i|

我们需要找到将当前字符串 S 转换为好字符串所需的最低交换成本。

此外,如果无法将字符串 S 转换为好字符串,那么我们也需要告诉它,就像如果 S=00 那么我们永远无法将其转换为好字符串一样。

示例:设字符串 S=0011,那么如果成本类型为 1,即我们可以交换任意两个位置,成本将 |j−i| 则答案为 1,并且对于类型 2 的成本为 (3−2)^2=1

这个问题

的DP解决方案是什么|S|<=10^5 而不是暴力解决方案。请帮助我找到此问题的重复出现以找到最低成本

如果我

错了,请纠正,但最多只能有两种解决方案。

如果 0 和 1 的数量相等,我们有两个解决方案,一个从 0 开始,另一个以 1 开头。否则,只有一个解决方案:以丰富的数字开始和结束。如果计数差异大于 1,则没有解决方案。

对于每种情况,您都可以简单地计算成本。

例如。如果我们需要在位置 0 交换一个 1,找到下一个立即额外的 0 并与之交换。此解决方案是您提到的所有 3 种情况的最佳解决方案。

最新更新