【问题标题】: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 之一(即aabababaabbabababb)。那么对于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)
    

    【讨论】:

      猜你喜欢
      • 2021-12-01
      • 1970-01-01
      • 2015-05-25
      • 2012-10-17
      • 2021-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多