题目链接:https://leetcode.cn/problems/palindromic-substrings/
1、确定dp数组
布尔类型的dp[i][j]:表示区间范围[i,j] (注意是左闭右闭)的子串是否是回文子串,如果是dp[i][j]为true,否则为false。
2、确定递推公式
有两种情况:
3、初始化dp数组
dp[i][j]初始化为false
4、确定遍历顺序
递推公式中,有一种是需要从一种状态到另一种状态的
如果是从上到下,从左到右,是不行的,因为下面的还没有计算出来的结果,所以这个遍历顺序不可以
所以一定要从下到上,从左到右遍历,这样保证dp[i + 1][j - 1]都是经过计算的。
class Solution {public int countSubstrings(String s) {int len = s.length();int ans = 0;if (s == null || len < 1) {return 0;}// 创建dp数组// dp[i][j]:s字符串下标i到下标j的字串是否是一个回文串,即s[i, j]boolean[][] dp = new boolean[len][len];// 推导dp公式for (int j = 0; j
题目链接:https://leetcode.cn/problems/longest-palindromic-subsequence/
跟上一个题目的不同的是,上一题是 回文子串,回文子串是连续的;这一道题目是回文子序列,回文子序列可以不是连续的
1、确定dp数组
dp[i][j]:字符串s在[i, j]范围内最长的回文子序列的长度为dp[i][j]
2、确定递推公式
有两种情况:
3、初始化dp数组
根据递推公式
4、遍历顺序