516. 最长回文子序列
动态规划
class Solution {
public int longestPalindromeSubseq(String s) {
/**
* 类似于《647. 回文子串》
* dp[i][j]定义为区间为[i, j]内最长的回文子串长度
* 初始化每个字符就是一个回文串,即每个dp[i][i] == 1
*/
int[][] dp = new int[s.length()][s.length()];
for (int i = s.length() - 1; i >= 0; i--) {
dp[i][i] = 1;
for (int j = i + 1; j < s.length(); j++) {
/**
* 如果i和j的字符相等,且i和j是同一个字符或者是相邻字符,或者i往右缩一步,j往左缩一步得到的字符串也是回文串
* 就可以确定[i, j]区间也是回文串
* 否则就分别让i或j各退一步,计算最大值
*/
if (s.charAt(i) == s.charAt(j)){
dp[i][j] = dp[i + 1][j - 1] + 2;
}
else {
dp[i][j] = Math.max(dp[i + 1][j], dp[i][j - 1]);
}
}
}
return dp[0][s.length() - 1];
}
}
/**
* 时间复杂度 O(n^2)
* 空间复杂度 O(n^2)
*/
https://leetcode-cn.com/problems/longest-palindromic-subsequence/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理