# 分割回文串 II

<p>给你一个字符串 <code>s</code>，请你将 <code>s</code> 分割成一些子串，使每个子串都是回文。</p>

<p>返回符合要求的 <strong>最少分割次数</strong> 。</p>

<div class="original__bRMd">
<div>
<p> </p>

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

<pre>
<strong>输入：</strong>s = "aab"
<strong>输出：</strong>1
<strong>解释：</strong>只需一次分割就可将 <em>s </em>分割成 ["aa","b"] 这样两个回文子串。
</pre>

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

<pre>
<strong>输入：</strong>s = "a"
<strong>输出：</strong>0
</pre>

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

<pre>
<strong>输入：</strong>s = "ab"
<strong>输出：</strong>1
</pre>

<p> </p>

<p><strong>提示：</strong></p>

<ul>
	<li><code>1 <= s.length <= 2000</code></li>
	<li><code>s</code> 仅由小写英文字母组成</li>
</ul>
</div>
</div>


## template

```python

class Solution:
    def minCut(self, s):
        size = len(s)

        is_palindrome = [[False] * size for _ in range(size)]
        for r in range(size):
            for l in range(r, -1, -1):
                if s[l] == s[r] and (r - l <= 2 or is_palindrome[l + 1][r - 1]):
                    is_palindrome[l][r] = True

        dp = [i for i in range(size)]
        for i in range(1, size):
            if is_palindrome[0][i]:
                dp[i] = 0
            else:
                dp[i] = min(dp[j] + 1 for j in range(i) if is_palindrome[j + 1][i])

        return dp[-1]
```

## 答案

```python

```

## 选项

### A

```python

```

### B

```python

```

### C

```python

```