已解决
力扣第47天--- 第647题、第516题
来自网友在路上 157857提问 提问时间:2023-09-20 13:42:38阅读次数: 57
最佳答案 问答题库578位专家为你答疑解惑
# 力扣第47天— 第647题、第516题
文章目录
- 一、第647题--回文子串
- 二、第516题--最长回文子序列
一、第647题–回文子串
逻辑梳理清楚了,就还行。没有想象中那么难。注意遍历顺序,i从大到小。
class Solution {
public:int countSubstrings(string s) {vector<vector<bool>> dp(s.size(), vector<bool>(s.size(), false));int result = 0;for (int i = s.size()-1; i>=0; i--){for (int j = i; j<= s.size()-1; j++){if(s[i] == s[j]) {if (j-i <=1) {dp[i][j] = true;result++;}else {dp[i][j] = dp[i+1][j-1];if (dp[i][j]) result++;}}}}return result;}
};
二、第516题–最长回文子序列
还可以吧,跟上一题差不多。遍历顺序一样,但是要注意,j的遍历起点为i+1,因为递归的时候涉及到i+1,会导致越界。递推公式,要想一想,但是难度不大。
class Solution {
public:int longestPalindromeSubseq(string s) {vector<vector<int>> dp(s.size(), vector<int>(s.size(), 0));for(int i =0; i<s.size(); i++) dp[i][i] = 1;for(int i = s.size()-1; i>=0; i--){for (int j = i+1; j< s.size(); j++){// cout << dp[i][j] << '-';if(s[i] == s[j]) dp[i][j] = dp[i+1][j-1] + 2;else dp[i][j] = max(dp[i+1][j], dp[i][j-1]);}}return dp[0][s.size()-1];}
};
查看全文
99%的人还看了
相似问题
猜你感兴趣
版权申明
本文"力扣第47天--- 第647题、第516题":http://eshow365.cn/6-10003-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: pixel2的root过程
- 下一篇: 采用多幅图像对面阵摄像机进行标定