学习目标:
- 掌握几种基本的算法结构,实现算法问题解决的基本思维
学习内容:
给你一个字符串 s
,找到 s
中最长的回文子串。
如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。
示例 1:
输入:s = "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。
示例 2:
输入:s = "cbbd" 输出:"bb"
题解明细:
思路:(暴力解法)双层for循环遍历所有字符子串,然后判断该子串是否为回文子串
学习笔记:
1、作为菜鸟的我,可能对于这种题目优先考虑的还是最直接的方式,就是双for循环去遍历求解。既然你是要找出最大的回文子串,那我们就一个个找。首先null和单字符必然满足回文条件,然后2个的字符串,只要s1==s2那也满足条件,接下来我们就要去筛选大于2的字符串,那就要俩个for循环目的就是列举所有的子串找到回文子串。
2、在参考了各位大神的经验之后,我后知后觉了解到实际上本题是考察我们对动态规划的了解程度,所有需要我们去用动态规划的思路去解决此类问题。
动态规划:
(1)构建二维数组 dp 来存储子字符串的回文状态。dp[i][j] 表示子字符串 s[i:j+1] 是否是回文串。
(2)初始化时,所有长度为 1 的子串都是回文串,因此 dp[i][i] 为 True。然后,我们从左到右,从上到下遍历整个二维数组。如果两个字符相等且它们之间的子串也是回文串,那么这两个字符加上它们之间的子串就构成一个回文串
(3)在遍历过程中,我们记录最长回文子串的起始位置和长度。最后,通过起始位置和长度截取原始字符串,得到最长回文子串
矩阵图练习地址:https://alchemist-al.com/algorithms/longest-palindromic-substring
学习产出:
- CSDN 技术笔记 1遍
- CSDN
- leetcode 题目闭环 1个
- . - 力扣(LeetCode)