class Solution:
def wordBreak(self, s: str, wordDict: List[str]) -> bool:
dic = set(wordDict)
@lru_cache(None)
def dfs(substring):
n = len(substring)
if n == 0:
return True
i = 0
while i < n:
if substring[:i + 1] in dic and dfs(substring[i + 1:]):
return True
i += 1
return False
return dfs(s)