模版题-动态规划-单词拆分( 完全背包 )

管理员
**形如用物品装满背包的问题,优先考虑背包问题。** 物品可以是数字,可以是字符串;背包可以是容量,也可以是字符串。 总之,形如用某物填充/装满某物的问题,优先考虑背包解决。 ```python class Solution: def wordBreak(self, s: str, wordDict: List[str]) -> bool: # 完全背包 # 用wordDict内的物品组装成s —— 典型背包问题 # 注意: 物品的顺序不同组成的单词不同,所以应当是按照排列的方式确认是否可以拼成s。 # dp[ i ]表示s[ 0:i+1 ]是否可以用wordDict拼成 ( 左闭右开区间 ) n = len( s ) dp = [ False for _ in range( n + 1 ) ] dp[ 0 ] = True # s[ 0:1 ]="",不选任何物品可可形成 for i in range( 1, n + 1 ): for v in wordDict: len_v = len( v ) if i - len_v >= 0: # 若选v, 需要确定s[ i - len( v ): i + 1 ]是否和v相同 flag = True for j in range( len_v ): if v[ j ] != s[ i - len_v + j ]: flag = False break dp[ i ] = dp[ i ] or ( dp[ i - len( v ) ] and flag ) return dp[ n ] ```
评论 0

发表评论 取消回复

Shift+Enter 换行  ·  Enter 发送
还没有评论,来发表第一条吧