您的位置:首页 > 编程语言 > Java开发

[leetcode]132. Palindrome Partitioning II(Java)

2017-07-17 14:26 525 查看
https://leetcode.com/problems/palindrome-partitioning-ii/#/description

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.

package go.jacob.day717;

import org.junit.Test;

public class Demo1 {
@Test
public void testName() throws Exception {
System.out.println(minCut("abcdefg"));
}

public int minCut(String s) {
if (s == null)
return 0;
char[] c = s.toCharArray();
int n = s.length();
int min;
// cut用来记录结果
int[] cut = new int
;
// res[j][i]为true,表示s中下标j到i的子串为回文字符串
boolean[][] res = new boolean

;
for (int i = 0; i < n; i++) {
// 初始化,默认全部无回文
min = i;
for (int j = 0; j <= i; j++) {
if (c[j] == c[i] && (j > i - 2 || res[j + 1][i - 1])) {
res[j][i] = true;
min = j == 0 ? 0 : Math.min(min, cut[j - 1] + 1);
}
}
cut[i]=min;
}
return cut[n - 1];
}

public int minCut_1(String s) {
if (s == null)
return 0;
int i, j, n = s.length();
int cuts[] = new int
;
boolean dp[][] = new boolean

;

for (i = 0; i < n; i++) {
cuts[i] = i;
for (j = 0; j <= i; j++) {
if (j == i)
dp[j][i] = true;
else {
if (s.charAt(i) != s.charAt(j))
continue;
if (j == i - 1)

dp[j][i] = true;
else
dp[j][i] = dp[j + 1][i - 1];
}

if (dp[j][i]) {
if (j == 0)
cuts[i] = 0;
else
cuts[i] = Math.min(cuts[j - 1] + 1, cuts[i]);
}
}
}
return cuts[n - 1];

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: