# 单词拆分 II

<p>给定一个<strong>非空</strong>字符串 <em>s</em> 和一个包含<strong>非空</strong>单词列表的字典 <em>wordDict</em>，在字符串中增加空格来构建一个句子，使得句子中所有的单词都在词典中。返回所有这些可能的句子。</p>

<p><strong>说明：</strong></p>

<ul>
	<li>分隔时可以重复使用字典中的单词。</li>
	<li>你可以假设字典中没有重复的单词。</li>
</ul>

<p><strong>示例 1：</strong></p>

<pre><strong>输入:
</strong>s = &quot;<code>catsanddog</code>&quot;
wordDict = <code>[&quot;cat&quot;, &quot;cats&quot;, &quot;and&quot;, &quot;sand&quot;, &quot;dog&quot;]</code>
<strong>输出:
</strong><code>[
&nbsp; &quot;cats and dog&quot;,
&nbsp; &quot;cat sand dog&quot;
]</code>
</pre>

<p><strong>示例 2：</strong></p>

<pre><strong>输入:
</strong>s = &quot;pineapplepenapple&quot;
wordDict = [&quot;apple&quot;, &quot;pen&quot;, &quot;applepen&quot;, &quot;pine&quot;, &quot;pineapple&quot;]
<strong>输出:
</strong>[
&nbsp; &quot;pine apple pen apple&quot;,
&nbsp; &quot;pineapple pen apple&quot;,
&nbsp; &quot;pine applepen apple&quot;
]
<strong>解释:</strong> 注意你可以重复使用字典中的单词。
</pre>

<p><strong>示例&nbsp;3：</strong></p>

<pre><strong>输入:
</strong>s = &quot;catsandog&quot;
wordDict = [&quot;cats&quot;, &quot;dog&quot;, &quot;sand&quot;, &quot;and&quot;, &quot;cat&quot;]
<strong>输出:
</strong>[]
</pre>


## template

```python
class Solution(object):
    def dfs(self, low, length, s, res, vaild, path=[]):
        if low == length:
            res.append(" ".join(path))
            return
        for i in range(low, length):
            if vaild[low][i]:
                self.dfs(i + 1, length, s, res, vaild, path + [s[low : i + 1]])

    def wordBreak(self, s, wordDict):
        """
        :type s: str
        :type wordDict: List[str]
        :rtype: List[str]
        """
        length = len(s)
        vaild = [[False] * length for _ in range(length)]
        dp = [False for _ in range(length + 1)]
        dp[0] = True
        wordDict = set(wordDict)
        for i in range(1, length + 1):
            for j in range(i + 1):
                word = s[j:i]
                if dp[j] and word in wordDict:
                    dp[i] = True
                    vaild[j][i - 1] = True
        res = []
        if dp[-1]:
            self.dfs(0, length, s, res, vaild)
        return res


```

## 答案

```python

```

## 选项

### A

```python

```

### B

```python

```

### C

```python

```