[LeetCode] 132. Palindrome Partitioning II Java
题目:
Given a string s, partition s such that every substring of the partition is a palindrome.
Return the minimum cuts needed for a palindrome partitioning of s.
For example, given s = "aab"
,
Return 1
since the palindrome partitioning ["aa","b"]
could be produced using 1 cut.
题意及分析:一个字符串能分割成很多回文子串,求最小分割次数。用一个数组保存当当前点的最小可能分割方法。
代码:
class Solution { public int minCut(String s) { boolean[][] isPalindrome = new boolean[s.length()][s.length()]; //boolean[i][j]记录i到j是否为回文 int[] cut = new int[s.length()]; //记录到当前点最小的分割次数 for(int i=0;i<s.length();i++){ int min = i; for(int j = 0;j<=i;j++){ if(s.charAt(i)==s.charAt(j) && (i-j<=2||isPalindrome[j+1][i-1])){ isPalindrome[j][i] = true; min = j == 0 ? 0 : Math.min(min, cut[j - 1] + 1); } } cut[i] = min; } return cut[s.length() - 1]; } }