Leetcode 516. 最长回文子序列 动态规划
/* * @lc app=leetcode.cn id=516 lang=cpp * * [516] 最长回文子序列 * * https://leetcode-cn.com/problems/longest-palindromic-subsequence/description/ * * algorithms * Medium (61.12%) * Likes: 437 * Dislikes: 0 * Total Accepted: 47.4K * Total Submissions: 77.4K * Testcase Example: '"bbbab"' * * 给定一个字符串 s ,找到其中最长的回文子序列,并返回该序列的长度。可以假设 s 的最大长度为 1000 。 * * * * 示例 1: * 输入: * * "bbbab" * * * 输出: * * 4 * * * 一个可能的最长回文子序列为 "bbbb"。 * * 示例 2: * 输入: * * "cbbd" * * * 输出: * * 2 * * * 一个可能的最长回文子序列为 "bb"。 * * * * 提示: * * * 1 <= s.length <= 1000 * s 只包含小写英文字母 * * */
思路:
使用二维dp数组记录,其中dp[i][j]表示以i开头j结尾的字符串中的最长回文子序列长度。
初始化时,dp[i][i]=1,表示自身。dp[i][j] i>j时肯定为0,所以只需要遍历右上三角部分
class Solution { public: int longestPalindromeSubseq(string s) { int n=s.size(); vector<vector<int>> dp(n, vector<int>(n,0)); for(int i=0;i<n;++i){ dp[i][i]=1; } for(int i=n-1;i>=0;--i){ for(int j=i+1;j<n;++j){ if(s[i]==s[j]){ dp[i][j]=dp[i+1][j-1]+2; } else{ dp[i][j]=max(dp[i+1][j],dp[i][j-1]); } } } return dp[0][n-1]; } };
联系方式:emhhbmdfbGlhbmcxOTkxQDEyNi5jb20=
分类:
leetcode
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
2020-04-29 从零开始学动态规划(转)