最长回文子串-三种DP实现

最长回文子串

https://leetcode-cn.com/problems/longest-palindromic-substring/

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

示例 1:

输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。

示例 2:

输入: "cbbd"
输出: "bb"

用动态规划来做,列举了三种解法

解法一

  • 动态规划求解:

    • map[i][j]中,i表示起点坐标,j表示长度
    • map[i][1] = 1,单个的字符同样为回文串
    • s[i] == s[i+1]时候, map[i][2] = 2,连续的串同样为回文串
    • map[i-1][j+2] = j+2 当且仅当,map[i][j]非零(即对应的字符串为回文串),且s[i-1] == s[i+j](即,两边同时扩充一个位置),所以长度就是其本身
  • T: 156 ms M: 14.8 MB

class Solution {
   
public:
    string longestPalindrome(string s) {
   
        if (s.size() < 2)
            return s;
        int map[2000][2001];
        int total = 1, start=0;
        for (int i = 0; i < s.size(); ++i) map[i][1] = 1;
        for (int i = 0; i < s.size()-1; ++i){
   
            if (s[i] == s[i+1]) {
   
                map[i][2] = 2;
                total = 2;
                start = i;
            }else {
   map[i][2] = 0;}
        }
        for (int j = 3; j <= s.size(); ++j)<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肥宅_Sean

公众号“肥宅Sean”欢迎关注

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值