首页 > 编程语言 >代码随想录算法训练营第四十六天|LeetCode647.回文串、LeetCode516.最长回文子序列

代码随想录算法训练营第四十六天|LeetCode647.回文串、LeetCode516.最长回文子序列

时间:2024-12-14 09:01:41浏览次数:6  
标签:int 随想录 Length 讲解 第四十六 dp 回文

前言

打卡代码随想录算法训练营第49期第四十六天 ε(*′・∀・`)з゙

首先十分推荐学算法的同学可以先了解一下代码随想录,可以在B站卡哥B站账号、代码随想录官方网站代码随想录了解,卡哥清晰易懂的算法教学让我直接果断关注,也十分有缘和第49期的训练营大家庭一起进步。


LeetCode647 回文子串

题目链接:647 回文子串

文章讲解:回文子串

视频讲解:卡哥讲解 —— 回文子串

本题有点难度,但也可以自己想出来。

public class Solution {
    public int CountSubstrings(string s) {
        //dp数组含义:在i - j范围内是否为回文子串
        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])//如果字符相等
                {
                    if(j - i <= 1)//相减<=1就是 aa 或者 a的情况可以看做回文串
                    {
                        dp[i , j] = true;
                        result++;
                    }
                    else//>1就要判断其中间是否为回文串 是就+1不是就放弃
                    {
                        if(dp[i + 1 , j - 1])
                        {
                            dp[i , j] = true;
                            result++;
                        }
                    }
                }
                else
                    dp[i , j] = false;
            }
        } 
        return result;
    }
}

LeetCode516 最长回文子序列

题目链接:516 最长回文子序列

文章讲解:最长回文子序列

视频讲解:卡哥讲解 —— 最长回文子序列

public class Solution {
    public int LongestPalindromeSubseq(string s) {
        //dp数组含义:在i - j范围内的回文子的最大长度
        int[,] dp = new int[s.Length , s.Length];
        //当i和j指针在一起的时候 回文串长度肯定为1 所以初始化为1
        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/*因为初始化已经有了i = j情况 所以这里直接i + 1即可*/; j < s.Length; j++)
            {
                if(s[i] == s[j])//相等的情况下 就看中间情况 + 2 因为可以跳过中间的元素 所以只需要知道中间最大是多少就可以了
                    dp[i , j] = dp[i + 1 , j - 1] + 2;
                else//不相等情况就找 i + 1 到 j 和 i 到 j - 1的最大值
                    dp[i , j] = Math.Max(dp[i + 1 , j] , dp[i , j - 1]);
            }
        }
        return dp[0 , s.Length - 1];    
    }
}

学完动规了,看一下动态规划总结。明天见~~~

标签:int,随想录,Length,讲解,第四十六,dp,回文
From: https://blog.csdn.net/tancxiaohei23/article/details/144463982

相关文章

  • 代码随想录算法训练营第四十五天|LeetCode115.不同的子序列、LeetCode583.两个字符串
    前言打卡代码随想录算法训练营第49期第四十五天ε(*′・∀・`)з゙首先十分推荐学算法的同学可以先了解一下代码随想录,可以在B站卡哥B站账号、代码随想录官方网站代码随想录了解,卡哥清晰易懂的算法教学让我直接果断关注,也十分有缘和第49期的训练营大家庭一起进步。LeetCode115不......
  • 代码随想录训练营第十七天| 654.最大二叉树 617.合并二叉树 700.二叉搜索树中的搜索 9
    654.最大二叉树  题目链接/文章讲解:代码随想录视频讲解:又是构造二叉树,又有很多坑!|LeetCode:654.最大二叉树_哔哩哔哩_bilibili创建一个根节点,其值为 nums 中的最大值。递归地在最大值 左边 的 子数组前缀上 构建左子树。递归地在最大值 右边 的 子数组......
  • 代码随想录训练营第十六天| 513. 找树左下角的值 112. 路径总和 106.从中序与后序遍历
    513.找树左下角的值 题目链接:513.找树左下角的值-力扣(LeetCode)讲解链接:代码随想录 求最后一行最后一个左子节点的值就是求二叉树深度最大的叶子节点递归:确定递归函数的参数和返回值参数必须有要遍历的树的根节点,还有就是一个int型的变量用来记录最长深度。这里......
  • leetcode 125. 验证回文串
    125.验证回文串二刷,用时3ms,内存9.81MB一定要注意,是移除所有除了数字、字母以外的字符classSolution{public://'a'-'A'=32boolisPalindrome(strings){intleft=0,right=s.size()-1;while(left<right){while(left<......
  • 代码随想录算法训练营第四十三天|LeetCode300.最长递增子序列、LeetCode674.最长连续
    前言打卡代码随想录算法训练营第49期第四十三天 (๑ˉ∀ˉ๑)首先十分推荐学算法的同学可以先了解一下代码随想录,可以在B站卡哥B站账号、代码随想录官方网站代码随想录了解,卡哥清晰易懂的算法教学让我直接果断关注,也十分有缘和第49期的训练营大家庭一起进步。LeetCode300......
  • 【洛谷】P1217 [USACO1.5] 回文质数(AC详解)
    #include<iostream>//引入输入输出流头文件,用于实现标准输入输出操作,例如使用cin和cout#include<cmath>//引入数学函数库头文件,主要用于调用sqrt函数来求平方根,辅助判断质数usingnamespacestd;//函数声明,用于判断一个整数是否为质数,接收一个整数参数,返回布尔值......
  • 代码随想录:用栈实现队列
    代码随想录:用栈实现队列主要是记一下栈和队列的定义和基本使用方法,值得注意的是pop和push都是操作,没有返回值,需要先用top和front获得顶端的值。这个地方有个记忆技巧,栈只看“顶部顶端”,队列看“前后端”,即top和front-**创建栈**```cppstd::stack<int>s;检查是否为......
  • 代码随想录:用队列实现栈
    代码随想录:用队列实现栈classMyStack{public://pop就是拿队列的最后一个元素,只需要用另一个队列对现有队列遍历,拿到最后一个元素即可queue<int>target;MyStack(){}voidpush(intx){target.push(x);}intp......
  • 代码随想录day14 | leetcode 226.翻转二叉树 101. 对称二叉树 104.二叉树的最大深度 1
    226.翻转二叉树前序和后序写法都可以我用的是前序错误写法classSolution{publicTreeNodeinvertTree(TreeNoderoot){if(root==null)returnnull;swap(root.left,root.right);invertTree(root.left);invertTree(root.r......
  • leetcode 面试经典 150 题:验证回文串
    链接验证回文串题序号125类型字符串解题方法双指针法难度简单题目如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个回文串。字母和数字都属于字母数字字符。给你一个字符串s,如果它是回文串......