d
p
[
i
]
dp[i]
dp[i]表示i结尾的字符串是否可以拆分。
s
[
0
,
e
d
]
s[0,ed]
s[0,ed]在字典中,略过
不在,那么
d
p
[
e
d
−
l
e
n
g
t
h
]
dp[ed-length]
dp[ed−length]为真 +
s
[
e
d
−
l
e
n
g
t
h
+
1
:
e
d
]
s[ed-length+1:ed]
s[ed−length+1:ed]在字典中可拆, 则
d
p
[
e
d
]
dp[ed]
dp[ed]为真
class Solution:
def wordBreak(self, s: str, wordDict: List[str]) -> bool:
m = len(s)
worddict = list(set(wordDict))
n = list(set([len(em) for em in wordDict]))
n.sort()
dp = [False for i in range(m)]
dp[0] = s[0] in wordDict
for i in range(1,m):
if(s[:i+1] in wordDict):
dp[i] = True
continue
for length in n:
if(i - length >= 0):
if(dp[i - length] and s[i + 1 - length: i + 1] in wordDict):
dp[i] = True
break
else:
break
return dp[m-1]