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

回文子串

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];
    }
}
相关推荐
汉克老师9 分钟前
GESP4级考试语法知识(贪心算法(四))
开发语言·c++·算法·贪心算法·图论·1024程序员节
smj2302_7968265241 分钟前
用枚举算法解决LeetCode第3348题最小可整除数位乘积II
python·算法·leetcode
爱吃生蚝的于勒1 小时前
C语言最简单的扫雷实现(解析加原码)
c语言·开发语言·学习·计算机网络·算法·游戏程序·关卡设计
秋说2 小时前
【数据结构 | C++】整型关键字的平方探测法散列
数据结构·c++·算法
weixin_478689762 小时前
【回溯法】——组合总数
数据结构·python·算法
戊子仲秋2 小时前
【LeetCode】每日一题 2024_11_14 统计好节点的数目(图/树的 DFS)
算法·leetcode·深度优先
TaoYuan__4 小时前
机器学习的常用算法
人工智能·算法·机器学习
用户40547878374824 小时前
深度学习笔记 - 使用YOLOv5中的c3模块进行天气识别
算法
十七算法实验室5 小时前
Matlab实现麻雀优化算法优化随机森林算法模型 (SSA-RF)(附源码)
算法·决策树·随机森林·机器学习·支持向量机·matlab·启发式算法
黑不拉几的小白兔5 小时前
PTA部分题目C++重练
开发语言·c++·算法