CODE 1: Palindrome Partitioning II

原创 2013年09月08日 15:08:02

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.

 

	/**
	 * 使用动态规划计算任意两点间是否为回文
	 * @param s 字符串
	 * @return  最小Cut次数
	 */
	private int partition(String s) {
		if (s == null || s.length() == 0)
			return 0;
		
		boolean[][] isPalindromes = new boolean[s.length()][s.length()]; // 表示任意两点之间的字符串是否为回文

		for (int i = 0; i < s.length(); i++) {
			isPalindromes[i][i] = true;
		}
		for (int i = s.length() - 2; i >= 0; i--) {
			isPalindromes[i][i + 1] = s.charAt(i) == s.charAt(i + 1);
			for (int j = i + 2; j < s.length(); j++)
				isPalindromes[i][j] = (s.charAt(i) == s.charAt(j)) && isPalindromes[i + 1][j - 1];
		}

		return getMinCut(s, isPalindromes);
	}

	/**
	 * 使用动态规划计算最小Cut次数
	 * @param s 字符串
	 * @param isPalindromes 表示任意两点之间的字符串是否为回文
	 * @return
	 */
	private int getMinCut(String s, boolean[][] isPalindromes) {
		int[] cuts = new int[s.length()];
		for (int i = s.length() - 1; i >= 0; i--) {
			if (isPalindromes[i][s.length() - 1]) {
				cuts[i] = 0;
				continue;
			}
			int min = Integer.MAX_VALUE;
			for (int j = s.length() - 2; j >= i; j--) {
				if (isPalindromes[i][j]) {
					int tmp = 1 + cuts[j + 1];
					min = min > tmp ? tmp : min;
				}
			}
			cuts[i] = min;
		}
		return cuts[0];
	}


 

动态规划——回文最小分割数(palindrome-partitioning-ii)

题目: 给定一个字符串str,返回把str全部切成回文子串的最小分割数。 举例: str="ABA" ,不需要切割,返回0; str="ACDCDCDAD",最少需要切两次,比如"A"...
  • jingsuwen1
  • jingsuwen1
  • 2016年07月17日 21:06
  • 6707

【LeetCode】- Valid Palindrome(正确的回文)

[ 问题: ] Given a string, determine if it is a palindrome, considering only alphanumeric characters a...
  • zdp072
  • zdp072
  • 2014年08月28日 08:46
  • 3207

Palindrome Partitioning I 和II的代码和理解(动态规划思想)

Palindrome Partitioning I 和II的代码和理解(动态规划思想)
  • zhangbo_0323
  • zhangbo_0323
  • 2017年04月12日 20:48
  • 98

mysql分区表学习

一:怎样对已有数据的表进行表分区 可以直接alter table进行修改。 如: USE dba; ALTER TABLE t3 PARTITION BY RANGE(id)     ( ...
  • YABIGNSHI
  • YABIGNSHI
  • 2016年08月18日 15:02
  • 774

总结最长回文子串的几种做法 Longest Palindrome Substring

题目是:找出一个字符串中的最长回文子串。 例如:abcbcbb 的最长回文子串是 bcbcb 首先一种常见的错误方法是把原字符串S倒转过来成为S‘,以为这样就将问题转化成为了求S和S’的最长公共子串的...
  • hellobinfeng
  • hellobinfeng
  • 2014年03月16日 03:21
  • 3002

[leetcode]Valid Palindrome (判断回文数 C语言实现)

Valid Palindrome Given a string, determine if it is a palindrome, considering only alphanumeric ch...
  • sanmao0816
  • sanmao0816
  • 2015年03月26日 15:37
  • 909

1-11-6 - (2)定义ispalindrome函数(判断输入数据是否回文)

问题及代码:   运行结果: 知识点总结: 学习小结:
  • hexiaole1994
  • hexiaole1994
  • 2014年11月10日 11:17
  • 1112

EXC_BAD_ACCESS(code=1问题的解决办法

今天在仿写微博APP的时候遇到了一个问题,编译运行,下拉刷新微博,一切正常,再次下拉刷新,程序就崩了,Xcode报错,EXC_BAD_ACCESS(code=1,花了好长时间才发现是哪里错了,现在在这...
  • ShorewB
  • ShorewB
  • 2016年03月15日 15:18
  • 3311

关于以太网(Ethernet II)这个网络的个人理解以及应用(1)

这些年,关于‘网络通信’的特性描述,听过最多的拟合场景就是:一个人在讲话,哪些人(们)可以听得到?最近有机会进一步的琢磨这些事,这里做个总结。单播、多播、广播:在tcpi/ip四层模型中, 网络层(...
  • guozhongwei1
  • guozhongwei1
  • 2016年09月25日 17:18
  • 1352

从定义开始,一文看懂无偏估计的方差为什么是n-1

什么叫无偏估计?为什么方差的定义里写的是1/n,但又说无偏估计是1/(n-1)?本文本着一切都从定义开始的原则,推导无偏估计的方差...
  • SoftPoeter
  • SoftPoeter
  • 2017年10月18日 15:11
  • 172
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CODE 1: Palindrome Partitioning II
举报原因:
原因补充:

(最多只允许输入30个字)