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.
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 |
public class Solution { public
int minCut(String s) { int
cuts = 0; int
len = s.length(); if(len > 1){ boolean[][] isPalindrome = new
boolean[len][len]; //s.substring(i, i + 1) is palindrome (substring with length 1) for(int
i = 0; i < len; ++i) isPalindrome[i][i] = true; //substring with length > 1 for(int
i = len - 2; i >= 0; --i){ for(int
j = len - 1; j > i; --j){ if(j - i == 1){ isPalindrome[i][j] = (s.charAt(i) == s.charAt(j)); isPalindrome[j][i] = isPalindrome[i][j]; } else{ isPalindrome[i][j] = (s.charAt(i) == s.charAt(j) && isPalindrome[i + 1][j - 1]) ? true
: false; isPalindrome[j][i] = isPalindrome[i][j]; } } } int[] minCutting = new
int[len]; for(int
i = len - 1; i >= 0; --i){ if(isPalindrome[i][len - 1]) minCutting[i] = 0; else{ int
min = len + 1; for(int
j = i + 1 ; j < len; ++j){ if(isPalindrome[i][j - 1]) min = (min < 1
+ minCutting[j])? min : 1
+ minCutting[j]; } minCutting[i] = min; } } cuts = minCutting[0]; } return
cuts; }} |
leetcode--Palindrome Partitioning II
原文:http://www.cnblogs.com/averillzheng/p/3543742.html