当前位置:首页 > 编程笔记 > 正文
已解决

力扣第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 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!