九章算法面试题48 分割回文串
2015-05-13 01:39
369 查看
九章算法官网-原文网址
http://www.jiuzhang.com/problem/48/题目
对于给定字符串,求最少需要几次划分,能够将字符串划分为若干子串,每个子串都是一个回文串。如abaab,需要至少1次划分,将字符串划分为:a|baab,每个部分均为回文串。解答
这是一道典型的在字符串上进行分割的动态规划的问题。一般的状态表示方法如下:f[i]表示将前i个字符组成的子串进行划分,能够最少划分为多少个串,每个串都是回文串。那么有状态转移方程:f[i] = MIN(f[j] + 1, j<i && j+1~i是一个回文串)。这里判断一个串是否为回文串,可以用O(n)的判断,整体复杂度为i * j * 判断回文串 = O(n^3)。但这个复杂度是可以进行进一步优化的。即并不需要每次去重新判断一个字符串是否为回文串。可以多耗费一点空间,如用isPalindrome[i][j]代表i到j是否为一个回文串。很显然这个数组是存在递推关系的,可以在O(n^2)的时间内解决。所以整体的时间复杂度可以降到O(n^2)
参考程序:
http://answer.ninechapter.com/solutions/palindrome-partitioning-ii/
相关文章推荐
- 九章算法面试题84 奇偶分割数组
- 九章算法面试题78 有效回文串
- 九章算法面试题78 有效回文串
- 九章算法面试题39 分割数组
- 九章算法面试题73 翻转链表II
- 九章算法面试题82 合并有序链表
- lintcode&九章算法——Microsoft 面试题 | 我能赢 ? 待解决
- 九章算法面试题2 抄书问题
- 九章算法面试题26 方格取数
- 九章算法面试题40 不用除法求积
- 九章算法面试题46 正负交替
- 九章算法面试题63 快速幂
- 九章算法面试题74 中位数
- lintcode&九章算法——Google 面试题 | 3个非重复子数组最大和
- 九章算法面试题83 把0移到数组右边
- 九章算法面试题3 找坏球
- 九章算法面试题13 随机数生成器
- 九章算法面试题47 分糖果
- 九章算法面试题64 找第k大的特殊数
- 九章算法面试题75 二叉树的最小深度