代码随想录算法训练营第四十四天| 647. 回文子串 516.最长回文子序列

647. 回文子串 #

要求:#

找出回文子串的个数

思路:#

设置起始节点

如果头尾相等,且是相差为1,指定回文

如果相差很多,那么就看它的字串

代码:#

复制代码
 1 // 要求:找出 正反相等,且连续字符,开始结束位置不同,也认为是一个
 2 // dp[n][n] 起始-中止位置
 3 // 
 4 // 如果两边相等,这两个起始节点相差1个或者0个,那么就直接可以判断是回文
 5 // 如果相差很多,需要看i+1 j-1
 6 // 
 7 //
 8 int countSubstrings(string s) {
 9     if (s.size() == 1) return 1;
10     int result = 0;
11 
12     vector<vector<int>>dp(s.size(), vector<int>(s.size(), false));
13 
14     //起始
15     for (int i = s.size()-1; i >=0; i--)
16     {
17         //中止
18         for (int j = i; j < s.size(); j++)
19         {
20             if (s[i] == s[j])
21             {
22                 if (j - i <= 1)
23                 {
24                     dp[i][j] = true;
25                 }
26                 else
27                 {
28                     dp[i][j] = dp[i + 1][j - 1];
29                 }
30                     
31                 if (dp[i][j])
32                     result++;
33             }
34             
35         }
36     }
37 
38     return result;
39 }
复制代码

 516.最长回文子序列 #

要求:#

如果相等

那么就是中间的+2

如果不相等

那么就保留状态,掠过自己,dp[i+1][j], dp[i][j-1];

代码:#

复制代码
 1 // 要求:寻找最长的回文子序列
 2 // 
 3 // 难点: 可以舍弃一些节点 保存之前的状态
 4 // dp[n][m] 以起始节点为N 终止节点为M的 最长子序列长度
 5 // 
 6 // 如果不相等 dp[i][j] = dp[i+1][j]
 7 // 如果相等
 8 // dp[i][j] i==j则1 否则 dp[i][j-1]+1
 9 // 
10 // 初始化:全0
11 //
12 int longestPalindromeSubseq(string s) {
13     vector<vector<int>> dp(s.size(), vector<int>(s.size(), 0));
14 
15     for (int i = s.size() - 1; i >= 0; i--)
16     {
17         for (int j = i; j < s.size(); j++)
18         {
19             if (s[i] == s[j])
20             {
21                 if (i == j)
22                     dp[i][j] = 1;
23                 else
24                     dp[i][j] = dp[i+1][j - 1] + 2;
25             }
26             else
27             {
28                 dp[i][j] = max(dp[i+1][j], dp[i][j-1]);
29             }
30         }
31     }
32 
33     return dp[0][s.size() - 1];
34 }
复制代码

 

posted @   博二爷  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
历史上的今天:
2022-08-02 r,r+,w,w+,a,a+的区别
点击右上角即可分享
微信分享提示
CONTENTS