123456789101112131415161718192021 |
- import java.util.*;
- class Solution {
- private char[] chs;
- public int minCut(String s) {
- chs = s.toCharArray();
- int len = chs.length;
- int[] dp = new int[len + 1];
- for (int i = 0; i <= len; i++)
- dp[i] = i - 1;
- // dp[i] = dp[k] + 1, if s.substring(k, i + 1) is palindrome
- for (int i = 0; i < len; i++) {
- for (int l = i, r = i; 0 <= l && r < len && chs[l] == chs[r]; l--, r++)
- dp[r + 1] = Math.min(dp[r + 1], dp[l] + 1);
- for (int l = i, r = i + 1; 0 <= l && r < len && chs[l] == chs[r]; l--, r++)
- dp[r + 1] = Math.min(dp[r + 1], dp[l] + 1);
- }
- return dp[chs.length];
- }
- }
|