Leetcode 647. 回文子串
解题思路
斜上三角,从左下往上遍历,如果当前的两端的字符相等,长度为1或2,则为true,res++;如果超过2,则根据内部是否为true来决定是否设为true,res++
代码
class Solution {
public int countSubstrings(String s) {
int n = s.length();
int res = 0;
boolean [][]dp = new boolean[n][n];
for (int i = n-1; i >= 0; i--) {
for (int j = i; j < n; j++) {
if (s.charAt(i) == s.charAt(j)) {
if (i + 1 >= j) { // i,i 活 i,i+1
dp[i][j] = true;
res++;
} else if (dp[i+1][j-1]) {
dp[i][j] = true;
res++;
}
}
}
}
return res;
}
}
总结
暂无
Leetcode 516. 最长回文子序列
题目:516. 最长回文子序列
解析:代码随想录解析
解题思路
dp数组的含义是i到j的子串中回文子串最长的是多少。
代码
class Solution {
public int longestPalindromeSubseq(String s) {
int n = s.length();
int [][]dp = new int[n][n];//i到j的子串中回文子串最长的是多少
for (int i = 0; i < n; i++)
dp[i][i] = 1;
for (int i = n - 1; i >= 0; i--) {
for (int j = i + 1; j < n; j++) {
if (s.charAt(i) == s.charAt(j)) {
dp[i][j] = dp[i+1][j-1] + 2;
} else {
dp[i][j] = Math.max(dp[i+1][j], dp[i][j-1]);
}
}
}
return dp[0][n-1];
}
}
总结
暂无