金融品牌网站设计,沈阳网站维护公司,学校网站建设方案策划书,个人app怎么做LC647回文子串#xff08;未掌握#xff09;
暴力#xff1a;两层for循环#xff0c;遍历区间起始位置和终止位置#xff0c;然后还需要一层遍历判断这个区间是不是回文。所以时间复杂度#xff1a;O(n^3)dp数组含义
常规dp数组#xff1a;题目求什么#xff0c;我们…LC647回文子串未掌握
暴力两层for循环遍历区间起始位置和终止位置然后还需要一层遍历判断这个区间是不是回文。所以时间复杂度O(n^3)dp数组含义
常规dp数组题目求什么我们就如何定义dp数组。但是此题这样定义很难找到对应的递归关系根据回文性质来定义dp数组判断一个子字符串字符串的下表范围[i,j]是否回文依赖于子字符串下表范围[i 1, j - 1] 是否是回文 dp[i][j]表示区间范围[i,j] 注意是左闭右闭的子串是否是回文子串
递推公式
s[i]!s[j]dp[i][j]falses[i]s[j] ijdp[i][j]true(j-i)1dp[i][j]true(j-i)1dp[i][j]由dp[i1][j-1]决定
递归顺序dp[i][j]由dp[i1][j-1]决定因此从左下角开始往右往上遍历代码
LC516最长回文子序列未掌握
dp[i][j]字符串s在[i, j]范围内最长的回文子序列的长度为dp[i][j]。递推公式
s[i]s[j]dp[i][j]dp[i1][j-1]2s[i]!s[j] 说明s[i]和s[j]的同时加入 并不能增加[i,j]区间回文子序列的长度那么分别加入s[i]、s[j]看看哪一个可以组成最长的回文子序列。dp[i][j]Math.max(dp[i1][j],dp[i][j-1])
代码
需要注意ij时dp[i][j]1因此j从i1开始