代码随想录算法训练营|五十六天

回文子串

647. 回文子串 - 力扣(LeetCode)

dp含义:表示区间内[i,j]是否有回文子串,有true,没有false。

递推公式:当s[i]和s[j]不相等,false;相等时,情况一,j-i<=1,说明要么"a"或者"aa"这两种情况;情况二:dp[i+1,j-1]是true,例如"cbabc"。

(这里图画错,j和i换个位置)

cs 复制代码
public class Solution {
    public int CountSubstrings(string s) {
        bool[,] dp = new bool[s.Length,s.Length];
        int result = 0;

        for(int i=s.Length-1;i>=0;i--){
            for(int j=i;j<s.Length;j++){
                if(s[i] == s[j] && (j-i<=1 || dp[i+1,j-1])){
                    result++;
                    dp[i,j] = true;
                }
            }
        }

        return result;
    } 
}

最长回文子序列

516. 最长回文子序列 - 力扣(LeetCode)

dp含义:表示区间内[i,j]的回文子序列的长度dp[i,j]

cs 复制代码
public class Solution {
    public int LongestPalindromeSubseq(string s) {
        int[,] dp = new int[s.Length,s.Length];
        for(int i=0;i<s.Length;i++)dp[i,i] = 1;

        for(int i=s.Length-1;i>=0;i--){
            for(int j=i+1;j<s.Length;j++){
                if(s[i] == s[j]){
                    dp[i,j] = dp[i+1,j-1]+2;
                }else{
                    dp[i,j] = Math.Max(dp[i,j-1],dp[i+1,j]);
                }
            }
        }
        return dp[0,s.Length-1];
    }
}
相关推荐
2401_8582861135 分钟前
OS26.【Linux】进程程序替换(下)
linux·运维·服务器·开发语言·算法·exec·进程
张同学的IT技术日记1 小时前
【奇妙的数据结构世界】用图像和代码对队列的使用进行透彻学习 | C++
算法
极客BIM工作室1 小时前
强化学习算法分类与介绍(含权重更新公式)
算法·分类·数据挖掘
KarrySmile1 小时前
Day8--HOT100--160. 相交链表,206. 反转链表,234. 回文链表,876. 链表的中间结点
数据结构·算法·链表·双指针·快慢指针·hot100·灵艾山茶府
luckycoding1 小时前
1424. 对角线遍历 II
算法·leetcode·职场和发展
CoovallyAIHub1 小时前
基于ICR损失与SVMLP数据集:小目标检测新突破,车牌检测准确率显著提升
深度学习·算法·计算机视觉
鲸鱼24011 小时前
贝叶斯笔记
人工智能·算法·机器学习
刃神太酷啦2 小时前
Linux 常用指令全解析:从基础操作到系统管理(1w字精简版)----《Hello Linux!》(2)
linux·运维·服务器·c语言·c++·算法·leetcode
努力找工作的OMArmy2 小时前
力扣498 对角线遍历
算法·leetcode·职场和发展
不知名。。。。。。。。4 小时前
算法 ---哈希表
数据结构·算法·散列表