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

示例 1:

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

示例 2:

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

暴力法:

class Solution {
public:
string longestPalindrome(string s)
{
int len = s.size();
int start = 0;
int end = 0;
int MAX = 1;
for(int i = 0; i < len; i++)
{
for(int j = i + 1; j < len; j++)
{
int flag = true;
for(int k = i; k < i + (j - i + 1) / 2; k++)
{
if(s[k] != s[j + i - k])
{
flag = false;
break;
}
}
if(flag)
{
if(j - i + 1 > MAX)
{
start = i;
end = j;
MAX = j - i + 1;
}
}
}
}
string temp = "";
for(int i = start; i <= end; i++)
{
temp += s[i];
}
return temp;
}
};

动态规划:

为了改进暴力法,我们首先观察如何避免在验证回文时进行不必要的重复计算。考虑 “ababa” 这个示例。如果我们已经知道 “bab” 是回文,那么很明显,“ababa” 一定是回文,因为它的左首字母和右尾字母是相同的。

我们给出 P(i,j) 的定义如下:

P(i,j)={true,false,​如果子串Si​…Sj​是回文子串其它情况​

因此,

P(i,j)=(P(i+1,j−1) and Si​==Sj​)

基本示例如下:

P(i,i)=true

P(i,i+1)=(Si​==Si+1​)

这产生了一个直观的动态规划解法,我们首先初始化一字母和二字母的回文,然后找到所有三字母回文,并依此类推…

复杂度分析

  • 时间复杂度:O(n2), 这里给出我们的运行时间复杂度为 O(n2) 。
  • 空间复杂度:O(n2), 该方法使用 O(n2) 的空间来存储表。
class Solution {
public:
string longestPalindrome(string s)
{
int size = s.size();
int start = 0;
int MAX = 0;
vector<vector<bool> > dp(size, vector<bool>(size, false));
//len代表从当前位置开始长度为len的字符串(不算上当前的字符串)
//dp[i][j] == true 表示索引从i到j的子字符串是回文串
for(int len = 0; len < size; len++)
{
for(int i = 0; i < size - len; i++)
{
if(len == 0)
{
dp[i][i] = true;
}
else if(len == 1 && s[i] == s[i + len])
{
dp[i][i + len] = true;
}
else if(len > 1 && s[i] == s[i + len])
{
dp[i][i + len] = dp[i + 1][i + len - 1];
}
else
{
dp[i][i + len] = false;
} if(dp[i][i + len] == true && len >= MAX)
{
MAX = len;
start = i;
}
}
}
string res = "";
for(int i = start; i <= start + MAX; i++)
res += s[i];
return res;
}
};

Leetcode5.Longest Palindromic Substring最长回文字串的更多相关文章

  1. 【LeetCode每天一题】Longest Palindromic Substring(最长回文字串)

    Given a string s, find the longest palindromic substring in s. You may assume that the maximum lengt ...

  2. 5. Longest Palindromic Substring -- 最长回文字串

    Given a string S, find the longest palindromic substring in S. You may assume that the maximum lengt ...

  3. [LeetCode] Longest Palindromic Substring 最长回文串

    Given a string S, find the longest palindromic substring in S. You may assume that the maximum lengt ...

  4. LeetCode-5:Longest Palindromic Substring(最长回文子字符串)

    描述:给一个字符串s,查找它的最长的回文子串.s的长度不超过1000. Input: "babad" Output: "bab" Note: "aba ...

  5. LeetCode5. Longest Palindromic Substring 最长回文子串 4种方法

    题目链接:https://leetcode.com/problems/longest-palindromic-substring/ 题意很简单,就是求一个字符串得最长子串,这里的子串指连续的. 本文给 ...

  6. Leetcode 5. Longest Palindromic Substring(最长回文子串, Manacher算法)

    Leetcode 5. Longest Palindromic Substring(最长回文子串, Manacher算法) Given a string s, find the longest pal ...

  7. [LeetCode] 5. Longest Palindromic Substring 最长回文子串

    Given a string s, find the longest palindromic substring in s. You may assume that the maximum lengt ...

  8. 1. Longest Palindromic Substring ( 最长回文子串 )

    要求: Given a string S, find the longest palindromic substring in S. (从字符串 S 中最长回文子字符串.) 何为回文字符串? A pa ...

  9. LeetCode:Longest Palindromic Substring 最长回文子串

    题目链接 Given a string S, find the longest palindromic substring in S. You may assume that the maximum ...

随机推荐

  1. Luogu P3209 [HNOI2010]平面图判定(2-SAT)

    P3209 [HNOI2010]平面图判定 题意 题目描述 若能将无向图\(G=(V,E)\)画在平面上使得任意两条无重合顶点的边不相交,则称\(G\)是平面图.判定一个图是否为平面图的问题是图论中的 ...

  2. nginx配置虚拟主机的两种方式

    一. 通过端口区分不同的虚拟主机 二. 通过域名区分不同的虚拟主机 备注: 1)hosts文件路径:

  3. Python开发之MySQL安装

    MySQL下载安装后再安装破解版本的Navicat图形化数据库工具即可.   安装python后.再进行如下操作(也可以安装好虚拟环境virtualenv 或者增强工具pip install virt ...

  4. Ionic 新闻类别菜单

    1.效果图   2.controller .js .controller("ProductCtrl", function ($scope,$ionicModal,$ionicScr ...

  5. Spring注解驱动开发(五)-----扩展原理

    扩展原理 1.BeanPostProcessor-----bean后置处理器,bean创建对象初始化前后进行拦截工作的 2.BeanFactoryPostProcessor-----beanFacto ...

  6. Linux清除磁盘上的RAID信息(Disk /dev/mapper/ddf1_4c53492....)

    本文摘自https://www.cnblogs.com/blkqyd/p/7011104.html自学留存 原因: 这是因为硬盘带有raid信息,拿二手硬盘插入服务器时,系统会根据残留的信息自动发现r ...

  7. Activiti实战02_环境搭建

    1:下载Activiti 访问:https://www.activiti.org/download-bpm 可以下载Activiti相关文档和历史版本压缩包,在 https://www.activit ...

  8. Go之路一

    一.声明变量 var a int var b string var c []float32 var d func() bool var e struct{ x int } 第1行,声明一个整型类型的变 ...

  9. CSS实例 display display 边距

    CSS学习大纲 在标签上设置style属性: background-color:#2459a2 ; height:48px ; 编写CSS样式: 1.标签的style属性 2.写在head里面,sty ...

  10. bzoj 4241 历史研究——分块(区间加权众数)

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4241 套路:可以大力预处理,如果求区间加权众数,可以预处理i~j块(或 j 位置)的最大值, ...