演算法之DP——秋葉收藏集

it_was發表於2020-10-02

難度中等:confused:

小扣出去秋遊,途中收集了一些紅葉和黃葉,他利用這些葉子初步整理了一份秋葉收藏集 leaves, 字串 leaves 僅包含小寫字元 ry, 其中字元 r 表示一片紅葉,字元 y 表示一片黃葉。
出於美觀整齊的考慮,小扣想要將收藏集中樹葉的排列調整成「紅、黃、紅」三部分。每部分樹葉數量可以不相等,但均需大於等於 1。每次調整操作,小扣可以將一片紅葉替換成黃葉或者將一片黃葉替換成紅葉。請問小扣最少需要多少次調整操作才能將秋葉收藏集調整完畢。

示例 1:
輸入:leaves = “rrryyyrryyyrr”
輸出:2
解釋:調整兩次,將中間的兩片紅葉替換成黃葉,得到 “rrryyyyyyyyrr”

示例 2:
輸入:leaves = “ryr”
輸出:0
解釋:已符合要求,不需要額外操作

提示:
3 <= leaves.length <= 10^5
leaves 中只包含字元 ‘r’ 和字元 ‘y’

一開始的思路就是單純的通過幾次迭代找出左邊出現 r 和 y 的相關資訊和右邊出現 r 和 y 的相關資訊,然後對所有情況進行討論,結果發現,情況好多,需要判斷的很多:sob:

經過一番鬥爭,,,,,發現最合適的還是用動態規劃,感覺只要題中出現求最少或者最多的都可以用DP,因為動態規劃的初衷就是通過一些已經計算好的資訊去尋找一個最優解。
既然想著可以用DP,那麼就需要尋找狀態,因為我們需要將字串整成【紅,黃,紅】的排列,所以可以定義三個狀態:用0和2表示前面的紅色和後面的紅色,用1表示中間的黃色
之後我們可以定義一個二維陣列 dp[]

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章