动态规划(16)
来源:互联网 发布:淘宝售后服务时间 编辑:程序博客网 时间:2024/06/06 19:35
原题:
/** * Created by pradhang on 4/3/2017. * Given a string s, partition s such that every substring of the partition is a palindrome. * <p> * Return the minimum cuts needed for a palindrome partitioning of s. * <p> * For example, given s = "aab", * Return 1 since the palindrome partitioning ["aa","b"] could be produced using 1 cut. */
答案:
public class PalindromePartitioningII { private int A[]; private boolean[][] paliandrome; /** * Main method * * @param args */ public static void main(String[] args) { System.out.println(new PalindromePartitioningII().minCut("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")); } public int minCut(String s) { if (s == null || s.isEmpty()) return 0; A = new int[s.length()]; Arrays.fill(A, Integer.MAX_VALUE); char[] charArr = s.toCharArray(); paliandrome = new boolean[charArr.length][charArr.length]; return doNext(charArr, 0) - 1; } private int doNext(char[] s, int p) { if (p >= s.length) return 0; if (A[p] < Integer.MAX_VALUE) return A[p]; for (int i = p, l = s.length; i < l; i++) { if (p + 1 <= i - 1) { paliandrome[p][i] = (paliandrome[p + 1][i - 1] && (s[p] == s[i])); } else { paliandrome[p][i] = (i == p) || (s[i] == s[p]); } if (paliandrome[p][i]) { A[p] = Math.min(doNext(s, i + 1) + 1, A[p]); } } return A[p]; }}
阅读全文
0 0
- 动态规划(16)
- 【动态规划(一)】动态规划基础
- NYOJ 16 矩形嵌套(动态规划)
- NYOJ 16 矩形嵌套(动态规划)
- NYOJ-16-矩形嵌套(动态规划)
- 动态规划练习题-16(踩方格)
- 动态规划 16 (踩方格)
- 动态规划 16题
- 动态规划16
- 动态规划(1)
- 动态规划(2)
- 动态规划(3)
- 动态规划(4)
- HDOJ2046(动态规划)
- 动态规划(one)
- 动态规划(读书笔记)
- Pearls(动态规划)
- skiing(动态规划)
- JAVA并发编程(八)——Callable和Future
- zxing实现二维码生成和解析
- opencv3的sift特征提取方法(1)
- 老版本mt4修改字体《新定单》
- Qt做一个卡通摄像头
- 动态规划(16)
- MapReduce编程之Partitioner
- 测试夹具
- 大规模并行批处理作业的分布式云服务——批量计算使用教程
- ARM单片机与ARM内核
- 相似度(距离计算)汇总
- 数据库的分表
- 动态规划(17)
- 【SQL】ORACLE中左右补齐字符串,补齐位数的函数LPAD的使用方法教程,补齐ID用,RPAD,java的mybatis中实际使用