首页 > 其他分享 >(57/60)回文子串、最长回文子序列

(57/60)回文子串、最长回文子序列

时间:2024-03-28 17:14:36浏览次数:30  
标签:子串 int 57 60 序列 回文 dp size

DP最后一集

回文子串

leetcode:647. 回文子串

动态规划

代码实现

class Solution {
public:
/*
s[i:j]回文子串个数为dp[i][j]

if(s[i] == s[j]){
    if(j-i <= 1) dp[i][j] = true;
    else dp[i][j] = dp[i+1][j-1];
}

全部初始化为0
*/
    int countSubstrings(string s) {
        vector<vector<bool>> dp(s.size(),vector<bool>(s.size(),false));
        int count = 0;
        for(int i = s.size()-1;i >= 0;i--){
            for(int j = i;j < s.size();j++){
                if(s[i] == s[j]){
                    if(j-i <= 1){
                        dp[i][j] = true;
                    }else dp[i][j] = dp[i+1][j-1];
                }
                if(dp[i][j] == true) count++;
                // cout<<dp[i][j]<<' ';
            }
            // cout<<endl;
        }

        return count;
    }
};

最长回文子序列

leetcode:516. 最长回文子序列

动态规划

思路

意义:s[i:j]字符串最长的回文子序列长度为dp[i][j]

需要注意j-i>1时,dp[i][j] = dp[i+1][j-1] + 2;是加2!!

s[i]!=s[j]时,dp[i][j] = max(dp[i+1][j],dp[i][j-1]);

代码实现

class Solution {
public:
    int longestPalindromeSubseq(string s) {
        vector<vector<int>> dp(s.size(),vector<int>(s.size(),0));
        int result = 0;
        for(int i = s.size()-1;i >= 0;i--){
            for(int j = i;j < s.size();j++){
                if(s[i] == s[j]){
                    if(j-i == 0) dp[i][j] = 1;
                    else if(j-i == 1) dp[i][j] = 2;
                    else dp[i][j] = dp[i+1][j-1] + 2;
                }else{
                    dp[i][j] = max(dp[i+1][j],dp[i][j-1]);
                }
                // cout<<dp[i][j]<<' ';
                if(dp[i][j] > result) result = dp[i][j];
            }
            // cout<<endl;
        }

        return result;
    }
};

标签:子串,int,57,60,序列,回文,dp,size
From: https://www.cnblogs.com/tazdingo/p/18102140

相关文章

  • (58/60)每日温度、下一个更大元素Ⅰ
    每日温度leetcode:739.每日温度单调栈思路单调栈,存放元素下标。遍历一遍,每个元素和栈顶元素比较:<=栈顶元素,入栈>栈顶元素,result[st.top()]=i-st.top();弹出继续,直到遍历结束或<=栈顶元素代码实现classSolution{public:/*单调栈,存放元素下标遍历一遍,每个......
  • 补|(52/60)最长递增子序列、最长连续递增序列、最长重复子数组
    子序列问题最长递增子序列leetcode:300.最长递增子序列动态规划代码实现/*以nums[i]结尾的(含)递增子序列最长为dp[i]dp[i]由dp[0~i-1]的最大值推出if(nums[i]>nums[j])dp[i]=max(dp[i],dp[j]+1);//如果严格递增dp[0]=1;其余为0正序遍历*/classSol......
  • (60/60)last dance|柱状图中最大的矩形
    lastdance柱状图中最大的矩形leetcode:84.柱状图中最大的矩形单调栈思路和接雨水很类似,但需要首尾加0(尾0是为了触发计算,首0是为了避免首元素触发计算时没有left)注意点尾加0后还是要遍历到heights.size()-1,因为是以取出元素为基准计算的,而取出元素是当前遍历元素的上一......
  • (59/60)下一个更大元素Ⅱ、接雨水
    终于接到你下一个更大元素Ⅱleetcode:496.下一个更大元素I单调栈思路主要是循环数组的处理。直接等效为长度为2N,重复两遍的原数组即可,i<nums.size()变为i<2*nums.size()、i变为i%nums.size()。代码实现对每个元素都再遍历一遍原数组长度,,,时间复杂度O(N^2),超时了clas......
  • 听劝!24 选错 660/880/1000的人,已经二战了
    25考研的备考形势,势必跟以前不一样了。24考完,大家都发现,没有一本习题册,覆盖了考试的所有知识点。主流的模拟卷,都没有达到24卷的难度。这就意味着:一本习题册不够了!刷主流模拟卷不够了!这会需要整个考研复习的安排,作一个很大的调整。如果你还在看24以前的学长规划,它就可能......
  • 旷场实验KT-0860——观察研究实验动物神经精神变化
    旷场是观察研究实验动物神经精神变化、进入开阔环境后的各种行为,例如动物对新开阔环境的恐惧而主要在周边区域活动,在中间区域活动较少,但动物的探究特性又促使其产生在中间区域活动的动机,也可观察由此而产生的焦虑心理。兴奋药可以明显增加自主的活动而减少探究行为,在统一些剂......
  • 最新!强烈推荐!!KT-0857大小鼠T迷宫
    大小鼠T迷宫实验是一种用于评估小鼠和大鼠认知能力的实验方法。该迷宫是一个类似字母T形的结构,被分为三个部分:起始区、正中央和两个支路。起始区与两个支路都有门,可以通过开启或关闭门来引导小鼠或大鼠前往正确的支路。通过观察小鼠或大鼠在T迷宫中的行为,研究人员可以评估其认......
  • 力扣:回文数判断 java
    给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。示例1:输入:x=121输出:true示例2:输入:x=-121输出:false解释:从左向右读,为-121。从右向左读,......
  • 以太网芯片的配置:VSC8601和YT8531
    使用以太网芯片你需要关心的:1.phyaddress;2.delay;目的:RX_CLK(atReceiver)是在RX_CLK(atTransmitter)的基础上相移90°左右而得,这样采集到的数据会更加稳定。3.resettime;VSC8601参考:https://cloud.tencent.com/developer/article/1614786MDIO配置时序:PHYaddress......
  • Leetcode 回文链表
    Day12第一题用数组存储链表的数值,在检测是否是回文数组,数组长度不可变,所以用listclassSolution{publicbooleanisPalindrome(ListNodehead){List<Integer>list=newArrayList<>();while(head!=null){list.add(head.val);......