leetcode 664奇怪的印表機 區間dp

2021-10-25 00:01:28 字數 906 閱讀 9094

class

solution

: def strangeprinter

(self, s: str)

-> int:

dp=def getdp

(i,j)

:if i>j:

# 遞迴的終止條件

return

0 ans=1+

getdp

(i+1

,j) # 每次結果最大就是新增的與之前都不同,所以加1

if(i,j) not in dp:

# 不在就需要計算

for k in

range

(i+1

,j+1):

if s[i]

==s[k]

: ans =

min(ans,

getdp

(i+1

,k)+

getdp

(k+1

,j))

dp[i,j]

=ans

return dp[i,j]

return

getdp(0

,len

(s)-

1)

區間dp主要的思想就是要明白,二維的dp解決不了問題了,一定要引入多一次的迴圈,為什麼二維dp解決不了了呢?

對於此問題,dp陣列的值表示i到j 的最小解,那麼此解只有兩個答案,

要麼是i+1到j的解+1,及新增的字母不在i+1到j中

要麼是i+1到j的解

那麼到底是哪個i+1到j 的字母列印了第i個字母是不確定的

所以應該多來乙個迴圈,

k從i到j

即三重迴圈

Leetcode 664 奇怪的印表機

有台奇怪的印表機有以下兩個特殊要求 印表機每次只能列印同乙個字串行。每次可以在任意起始和結束位置列印新字元,並且會覆蓋掉原來已有的字元。給定乙個只包含小寫英文本母的字串,你的任務是計算這個印表機列印它需要的最少次數。示例 1 輸入 aaabbb 輸出 2 解釋 首先列印 aaa 然後列印 bbb 示...

奇怪的印表機 LeetCode664

有台奇怪的印表機有以下兩個特殊要求 印表機每次只能列印同乙個字串行。每次可以在任意起始和結束位置列印新字元,並且會覆蓋掉原來已有的字元。給定乙個只包含小寫英文本母的字串,你的任務是計算這個印表機列印它需要的最少次數。示例 1 輸入 aaabbb 輸出 2 解釋 首先列印 aaa 然後列印 bbb 示...

動態規劃 leetcode 664 奇怪的印表機

有台奇怪的印表機有以下兩個特殊要求 印表機每次只能列印同乙個字串行。每次可以在任意起始和結束位置列印新字元,並且會覆蓋掉原來已有的字元。給定乙個只包含小寫英文本母的字串,你的任務是計算這個印表機列印它需要的最少次數。示例 1 輸入 aaabbb 輸出 2 解釋 首先列印 aaa 然後列印 bbb 示...