leetcode-5

题目:

给你一个字符串 s,找到 s 中最长的 回文子串

示例 1:输入:s = "babad"  输出:"bab"  解释:"aba" 同样是符合题意的答案。

示例 2:输入:s = "cbbd"    输出:"bb"

提示:   1 <= s.length <= 1000  s 仅由数字和英文字母组成

 

推导:

 

代码:

复制代码
 1 class Solution {
 2 public:
 3     string longestPalindrome(string s) {
 4         int n = s.size();
 5         int maxLen = 1; // 定义最大回文串长度
 6         int begin = 0;
 7         if (n < 2) {
 8             return s;
 9         }
10 
11         // 创建二维数组dp[i][j]
12         vector<vector<int>> dp(n, vector<int>(n));
13 
14         // 首先对对角线上的单个元素形成的回文赋值true
15         for (int i=0; i<n; ++i) {
16             dp[i][i] = true;
17         } 
18 
19         for (int L=2; L<n; ++L) {
20             for (int i=0; i<n; ++i) {
21                 int j = L+i-1; // 起始的 L = 2,所以 j = 2+0-1 = 1,j = L-1+i, 
22                                // 可见 L-1 始终大于0, 因此 j > i
23                 
24                 // 如果右边界越界,则直接结束循环
25                 if (j >= n) {
26                     break;
27                 }
28 
29                 if (s[i] != s[j]) {
30                     dp[i][j] = false; // 如果串的首尾元素不相等,则判断该串 s[i..j] 不是回文串
31                 } else {
32                     if (L < 4){
33                         dp[i][j] = true; // 看笔记,或者博客园
34                     } else {
35                         dp[i][j] = dp[i+1][j-1]; // 看笔记,或者博客园
36                     }
37                 }
38                 if (dp[i][j] == true && L > maxLen) { 
39                     // 这里的比较条件可写为 if dp[i][j]
40                     // 这是因为 dp[i][j] 中仅存放 true/false,dp[i][j] == true 就相当于dp[i][j]
41                     // 后半部分可省略是因为 L 本身是在递增的,而每次循环 maxLen 的最大值总是当前循环的L 
42                     // 因此后面 L 一定比前面的maxLen要大,所以只要出现首尾相等,就说明L更大,因此可以省略
43                     maxLen = L;
44                     begin = i;
45                 }
46             }
47         }
48         return s.substr(begin, maxLen);
49     }
50 };
复制代码

 

posted @   路人呃呃  阅读(2)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示