题目
注意:
输入:s = “cars”, wordDict = [“car”,“ca”,“rs”]
输出:true
解释:"cars"可以拆分为“ca”、“rs”
代码实现
(动态规划一看就会,一写就废😓)
class Solution:
def wordBreak(self, s: str, wordDict) -> bool:
# dp[i]表示截止到第i个元素(不包括i)能否分割为wordDict
dp = [False] * (len(s)+1)
# s为空串,肯定可以
dp[0] = True
for i in range(1, len(s)+1):
"""
转移方程:dp[i] = (dp[j] && check(s[j..i−1]))
其中转移方程的含义为:如果能在在下标0~i-1中找到一个分割点,使得分割点前的部分可以分为wordDict,分割点后的词在wordDict中,则说明可以分为wordDict
"""
# 找分割点
for j in range(i):
if dp[j] and s[j:i] in wordDict:
dp[i] = True
break
return dp[-1]