132.palindrome-partitioning-ii.java 711 B

123456789101112131415161718192021
  1. import java.util.*;
  2. class Solution {
  3. private char[] chs;
  4. public int minCut(String s) {
  5. chs = s.toCharArray();
  6. int len = chs.length;
  7. int[] dp = new int[len + 1];
  8. for (int i = 0; i <= len; i++)
  9. dp[i] = i - 1;
  10. // dp[i] = dp[k] + 1, if s.substring(k, i + 1) is palindrome
  11. for (int i = 0; i < len; i++) {
  12. for (int l = i, r = i; 0 <= l && r < len && chs[l] == chs[r]; l--, r++)
  13. dp[r + 1] = Math.min(dp[r + 1], dp[l] + 1);
  14. for (int l = i, r = i + 1; 0 <= l && r < len && chs[l] == chs[r]; l--, r++)
  15. dp[r + 1] = Math.min(dp[r + 1], dp[l] + 1);
  16. }
  17. return dp[chs.length];
  18. }
  19. }