Palindrome Partitioning II
2014-04-01 14:49
316 查看
题目: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 =
Return
be produced using 1 cut.
算法思想:典型的动态规划问题(如果不知道动态规划,自行百度一下),
令s(i,j)表示字符串s索引从i 到j 分隔出来的子字符串,令IsPal(i,j)表示s(i,j)是否为回文字符串(IsPal(i,j)值为1表示是,0表示否),有IsPal(i,j)=IsPal(i+1,j-1)&& s[i]==s[j];
令minCut(i)表示S(0,i)的最小分隔数,有minCut(i)=min{minCut(j-1),j<=i且IsPal(j,i)==1}+1,且minCut(0)=0;
其中minCut各项的求解和IsPal各项的求解都使用了动态规划的思想,因为子问题有重叠,所以降低了算法的时间复杂度。
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
1since the palindrome partitioning
["aa","b"]could
be produced using 1 cut.
算法思想:典型的动态规划问题(如果不知道动态规划,自行百度一下),
令s(i,j)表示字符串s索引从i 到j 分隔出来的子字符串,令IsPal(i,j)表示s(i,j)是否为回文字符串(IsPal(i,j)值为1表示是,0表示否),有IsPal(i,j)=IsPal(i+1,j-1)&& s[i]==s[j];
令minCut(i)表示S(0,i)的最小分隔数,有minCut(i)=min{minCut(j-1),j<=i且IsPal(j,i)==1}+1,且minCut(0)=0;
其中minCut各项的求解和IsPal各项的求解都使用了动态规划的思想,因为子问题有重叠,所以降低了算法的时间复杂度。
int minCut(string s) { vector> isPal(s.length(), vector(s.length(), 0)); vector minCut(s.length(), 0); for (int i = 0; i < s.length(); i++) { for (int j = 0; j < s.length()-i; j++) { if (i == 0) isPal[j][i+j] = 1; else if (i == 1) isPal[j][i+j] = (s[j] == s[i+j]); else isPal[j][i+j] = (isPal[j+1][i+j-1] && s[j] == s[i+j]); } } minCut[0] = 0; for (int i = 1; i < s.length(); i++) { int minNum = 65536; for (int j = 0; j < i+1; j++) { if (isPal[j][i] == 1) { if (j == 0) { minNum = -1; break; } else { if (minCut[j-1] < minNum) minNum = minCut[j-1]; } } } minCut[i] = minNum+1; } return minCut[s.length()-1]; }
相关文章推荐
- String.intern
- 动易2006序列号破解算法公布
- Prototype源码浅析 String部分(二)
- C#数据结构与算法揭秘二
- 浅析STL中的常用算法
- 浅谈C++中的string 类型占几个字节
- 标准C++类string的Copy-On-Write技术
- PHP STRING 陷阱原理说明
- c#中 String和string的区别介绍
- asp.net String.IsNullOrEmpty 方法
- JavaScript 组件之旅(二)编码实现和算法
- javascript String 对象
- mysql输出数据赋给js变量报unterminated string literal错误原因
- IE8下String的Trim()方法失效的解决方法
- javascript String 的扩展方法集合
- C#中string与byte[]的转换帮助类-.NET教程,C#语言
- javascript下string.format函数补充
- JAVA中StringBuffer与String的区别解析
- java string的一些细节剖析
- csdn 批量接受好友邀请