力扣第47天--- 第647题、第516题

力扣第47天--- 第647题、第516题

文章目录

一、第647题--回文子串

​ 逻辑梳理清楚了,就还行。没有想象中那么难。注意遍历顺序,i从大到小。

c++ 复制代码
class Solution {
public:
    int countSubstrings(string s) {
        vector<vector<bool>> dp(s.size(), vector<bool>(s.size(), false));
        int result = 0;

        for (int i = s.size()-1; i>=0; i--){
            for (int j = i; j<= s.size()-1; j++){
                if(s[i] == s[j]) {
                    if (j-i <=1) {
                        dp[i][j] = true;
                        result++;
                    }
                    else {
                        dp[i][j] = dp[i+1][j-1];
                        if (dp[i][j]) result++;
                    }
                }
            }
        }
    return result;
    }
};

二、第516题--最长回文子序列

​ 还可以吧,跟上一题差不多。遍历顺序一样,但是要注意,j的遍历起点为i+1,因为递归的时候涉及到i+1,会导致越界。递推公式,要想一想,但是难度不大。

c++ 复制代码
class Solution {
public:
    int longestPalindromeSubseq(string s) {
        vector<vector<int>> dp(s.size(), vector<int>(s.size(), 0));
        for(int i =0; i<s.size(); i++) dp[i][i] = 1;

        for(int i = s.size()-1; i>=0; i--){
            for (int j = i+1; j< s.size(); j++){
               // cout << dp[i][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][s.size()-1];
    }
};
相关推荐
jllllyuz12 小时前
基于子集模拟的系统与静态可靠性分析及Matlab优化算法实现
算法·matlab·概率论
程序员-King.12 小时前
day143—递归—对称二叉树(LeetCode-101)
数据结构·算法·leetcode·二叉树·递归
BlockChain88812 小时前
字符串最后一个单词的长度
算法·go
爱吃泡芙的小白白12 小时前
深入解析:2024年AI大模型核心算法与应用全景
人工智能·算法·大模型算法
阿崽meitoufa13 小时前
JVM虚拟机:垃圾收集器和判断对象是否存活的算法
java·jvm·算法
ballball~~14 小时前
拉普拉斯金字塔
算法·机器学习
Cemtery11614 小时前
Day26 常见的降维算法
人工智能·python·算法·机器学习
Ethan-D15 小时前
#每日一题19 回溯 + 全排列思想
java·开发语言·python·算法·leetcode
Benny_Tang15 小时前
题解:CF2164C Dungeon
c++·算法
仙俊红15 小时前
LeetCode174双周赛T3
数据结构·算法