力扣第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];
    }
};
相关推荐
阿旭超级学得完42 分钟前
C++11包装器(function和bind)
java·开发语言·c++·算法·哈希算法·散列表
li星野44 分钟前
位运算 & 数学 & 高频进阶九题通关(Python + C++)
c++·python·学习·算法
jerryinwuhan1 小时前
hello算法,简单讲(1)
算法·排序算法
y = xⁿ1 小时前
20天速通LeetCodeday15:BFS广度优先搜索
算法·宽度优先
400分1 小时前
吃透RAG核心-----语义检索与关键字检索底层原理
算法·架构
目黑live +wacyltd1 小时前
算法备案:常见驳回原因与应对策略
人工智能·算法
磊 子1 小时前
多态类原理+四种类型转换+异常处理
开发语言·c++·算法
染指11103 小时前
3.AI大模型-token是什么-大模型底层运行机制
人工智能·算法·机器学习
谙弆悕博士3 小时前
快速学C语言——第19章:C语言常用开发库
c语言·开发语言·算法·业界资讯·常用函数
光影少年3 小时前
前端算法题
前端·javascript·算法