动态规划
方法1:暴力递归
public String longestPalindrome(String s) {
String ans = "";
for (int i = 0; i < s.length(); i++) {
for (int j = i; j < s.length(); j++) {
if (helper(s, i, j) && j - i + 1 > ans.length()) {
ans = s.substring(i, j + 1);
}
}
}
return ans;
}
private boolean helper(String s, int start, int end) {
if (start == end) return true;
if (start + 1 == end) return s.charAt(start) == s.charAt(end);
boolean ans = false;
if (s.charAt(start) == s.charAt(end)) {
ans = helper(s, start + 1, end - 1);
}
return ans;
}方法2:自顶向下记忆化递归(Top-down)
方法3:自底向上填表递归(Bottom-up)
方法4:中心扩展法
方法5:Manacher算法
分析
方法1:朴素版DP
方法2:空间压缩DP
分析
方法1:朴素版DP

方法2:空间压缩DP
分析
方法1:朴素版DP
分析
方法1:朴素版DP

方法2:压缩空间DP
分析
方法1:朴素版DP


分析
方法1:朴素版DP
方法2:空间压缩DP
方法1:DP
follow up:返回最大子数组和的起始索引
方法1:记忆化递归
方法2:记忆化递归
方法3:贪心
方法1:记忆化递归
方法2:DP
方法1:记忆化递归
方法2:BFS
方法1:记忆化递归
方法2:DP
Follow Up:打印路径
方法1:DP
方法2:记忆化递归
一些名词

定义状态

边界条件
核心代码
方法1:DP
方法2:贪心+二分
方法1:朴素版DP

方法2:空间压缩O(1)DP
方法0:朴素版回溯
方法1:回溯+状态压缩
方法2:回溯+HashMap
方法1:暴力递归
方法2:自顶向下记忆化递归(Top-down)
方法3:自底向上填表DP(Bottom-up)
方法4:矩阵相乘+快速幂
方法1:状态压缩+BFS
方法2:记忆化DFS
方法3:位运算+DP
方法1:三维数组+DP
方法2:二维数组+DP

Last updated