[leetcode]132. Palindrome Partitioning II(Java)

来源:互联网 发布:老男孩linux视频云盘 编辑:程序博客网 时间:2024/06/06 03:59

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 {@Testpublic 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[n];// res[j][i]为true,表示s中下标j到i的子串为回文字符串boolean[][] res = new boolean[n][n];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[n];boolean dp[][] = new boolean[n][n];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;elsedp[j][i] = dp[j + 1][i - 1];}if (dp[j][i]) {if (j == 0)cuts[i] = 0;elsecuts[i] = Math.min(cuts[j - 1] + 1, cuts[i]);}}}return cuts[n - 1];}}


原创粉丝点击