【问题标题】:Minimum cost of swapping chars in string so no 3 same are consecutive在字符串中交换字符的最低成本,因此没有 3 个相同的字符是连续的
【发布时间】:2020-06-22 14:58:58
【问题描述】:
我有一个只包含两个字符值的字符串:'a' 或 'b'。一个 char 可以换成另一个 char 值。字符串中的每个字符都有与交换它相关的成本。我需要找到交换的最低成本,以使结果字符串中没有 3 个具有相同值的连续字符。
如果我们有一个长度为 3 的连续字符块,那么我们只需交换最小成本字符。如果我们有一个长度大于 3 的块,那么我们就有多种交换的可能性。我不知道如何处理这种情况。如何有效地决定在长度大于 3 的块中交换哪些字符?
【问题讨论】:
标签:
string
algorithm
optimization
minimize
minimization
【解决方案1】:
我们可以在O(6n) = O(n) 时间和O(1) 空间用dynamic programming 解决这个问题。
当最后三个字符是六个有效states 之一(即aab、aba、baa 、bba、bab、abb)。那么对于i > 2:
dp[i][aab] ->
if s[i] == "a":
cost[i] + dp[i-1][baa]
else:
dp[i-1][baa]
dp[i][aba] ->
if s[i] == "a":
min(dp[i-1][aab], dp[i-1][bab])
else:
cost[i]+ min(dp[i-1][aab], dp[i-1][bab])
... (left as an exercise)