使用动态规划解决这个问题。我们可以定义一个布尔数组dp,其中dp[i]表示从字符串开头到索引i是否可以被分解为单词。初始化dp[0]为true,因为空字符串总是可分解的。然后,从索引1开始遍历字符串,对于每个索引j,再从0到j-1遍历一次,如果dp[k]为true且从k到j的子字符串也是一个词,则将dp[j]标记为true。最后,返回dp[n-1],n为字符串的长度。 以下是示例代码:
def wordBreak(s: str, wordDict: List[str]) -> bool:
n = len(s)
dp = [False] * n
for i in range(n):
for word in wordDict:
if word == s[i-len(word)+1:i+1] and (dp[i-len(word)] or i-len(word) == -1):
dp[i] = True
return dp[-1]