最优解问题,直观想到动态规划来解,那么首先是找到状态方程
假设f[i]代表0-i的数组长度内的最小切分,那么有以下转移条件
1. 0-i 整体为回文,那么f[i]=0
2. 0-i 不是回文, 那么必然存在0<j<=i 是的j-i 是回文, 那么对这个集合求最小值f[i]=min{f[j-1]+1},0<j<=i
注意红色部分初始化代码的技巧,普通的双层循环为导致超时
第一层循环定义了i和j的间距,后一次循环可以使用前一层循环的结果, 时间复杂度小于O(N*N),更重要的减小回文判断的复杂度以及次数
public class Solution {
public int minCut(String s) {
boolean[][] p = new boolean[s.length()][s.length()];
char[] c = s.toCharArray();
for (int i = 0; i < c.length; i++) {
p[i][i] = true;
}
for (int k = 1; k < c.length; k++) {
for (int i = 0; i + k < c.length; i++) {
int j = i + k;
p[i][j] = c[i] == c[j] && (i + 1 < j - 1 && p[i + 1][j - 1] || i + 1 >= j - 1);
}
}
int[] f = new int[s.length()];
for(int i=1; i<f.length; i++){
f[i] = i;
}
for(int i=1; i<s.length(); i++){
if(p[0][i]){
f[i]=0;
continue;
}
for(int j=0; j<=i; j++){
if(p[j][i] && (f[j-1]+1)<f[i]){
f[i]=f[j-1]+1;
}
}
}
return f[s.length()-1];
}
}
相关推荐
javascript js_leetcode题解之132-palindrome-partitioning-ii.js
python python_leetcode题解之132_Palindrome_Partitioning_II
javascript js_leetcode题解之131-palindrome-partitioning.js
python python_leetcode题解之131_Palindrome_Partitioning
gas station leetcode 在牛客网上的在线编程...palindrome-partitioning-ii 动态规划 triangle 树 sum-root-to-leaf-numbers 动态规划 distinct-subsequences 递归 valid-palindrome 模拟 pascals-triangle 模拟 pasca
leetcode力扣是什么 leetcode-按类别 看了一些leetcode刷题指南,总结一下两个重点,一是最好按照类别刷题,总结思路;二是由易到难,不要产生太大挫败感。 另外最好集中时间强度大一点来刷;还可以每个题只预留固定...
数位之和leetcode LeetCode-cpp 个人 LeetCode C++ 答案库。 我的 LeetCode 个人资料: 如果你想讨论,请加入QQ群: 其他语言 优先级从高到低排列。 一句话总结问题 命名规则 number-this_is_title-difficulty (e-...
leetcode 分类 LeetCode Progress 128/154 Other Solutions C++,有详细思路解释 python,部分有解释 Java,部分有解释 Java Associated Documents and Resources Peter norvig神牛Python代码写的很飘逸,果然是有LISP...
1. **Palindrome Partitioning (mine).cpp** - 这个文件是关于LeetCode的第131题“回文分割”。该问题要求将一个字符串分割成多个回文子串。解冑通常涉及深度优先搜索或动态规划,寻找所有可能的分割方案并检查是否...
分割回文串(Palindrome Partitioning)**:这是一个关于字符串处理的题目,要求将一个字符串分割成若干个回文子串。主要涉及的算法是深度优先搜索(DFS),通过递归的方式检查所有可能的分割方案,判断是否都是回文。 ...
Palindrome_Partitioning DP,避免递归调用,利用数组储存已算出来的数值,由后向前逐渐增加字符串处理 Palindrome_Partitioning_2 同上 Sum_Root_to_Leaf_Numbers DFS Surrounded_Regions 由四周‘O’开始向内检索...
这些题目覆盖了数据结构(如二叉树、哈希表)、算法(如动态规划、回文判断、层次遍历)等多个方面,对于提升Java程序员的编程能力和算法理解非常有帮助。通过研究这些解决方案,可以加深对Java语言特性和常见数据...
对于更高级的题目,可能会涉及图论或动态规划,比如`0131_palindrome_partitioning.py`可能涉及回文子串分割,这通常会用到动态规划来避免重复计算。 在PythonAlgo项目中,每个问题的解决方案都提供了清晰的思路和...