给定一个字符串 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. 2019-5-21-C#-命令行如何静默调用-del-删除文件

    title author date CreateTime categories C# 命令行如何静默调用 del 删除文件 lindexi 2019-05-21 11:32:28 +0800 2019 ...

  2. [Hdu-6053] TrickGCD[容斥,前缀和]

    Online Judge:Hdu6053 Label:容斥,前缀和 题面: 题目描述 给你一个长度为\(N\)的序列A,现在让你构造一个长度同样为\(N\)的序列B,并满足如下条件,问有多少种方案数? ...

  3. Data Lake Analytics: 读/写PolarDB的数据

    Data Lake Analytics 作为云上数据处理的枢纽,最近加入了对于PolarDB的支持, PolarDB 是阿里云自研的下一代关系型分布式云原生数据库,100%兼容MySQL,存储容量最高 ...

  4. 【Redis缓存机制】1.Redis介绍和使用场景

    (1)持久化数据库的缺点平常我们使用的关系型数据库有Mysql.Oracle以及SqlServer等,在开发的过程中,数据通常都是通过Web提供的数据库驱动来链接数据库进行增删改查. 那么,我们日常使 ...

  5. 88 Lowest Common Ancestor of a Binary Tree

    原题网址:https://www.lintcode.com/problem/lowest-common-ancestor-of-a-binary-tree/description 描述 给定一棵二叉树 ...

  6. 【JAVA】Class.getResource()与ClassLoader.getResource()的区别

    转载自:https://blog.csdn.net/qq_33591903/article/details/91444342 Class.getResource()与ClassLoader.getRe ...

  7. 适配器模式(Adapter\Adaptee)

    将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作. (1)目标(Target)——客户所期待得到的接口,目标可以是具体的或抽象的类,也可以是接 ...

  8. 901. Online Stock Span [短于线性的时间统计单个元素的Span ]

    Span 指这个元素之前连续的小于这个元素的值有多少个 原理: 维护递减栈 这个栈内的元素是递减的序列 新到一个元素x 依次出栈比x小的(也就是这个元素的Span) 这种问题的关键在于 新来的元素如果 ...

  9. independent set 1

    independent set 1 时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 102400K,其他语言204800K64bit IO Format: %lld 题目描述 Note: ...

  10. linux在线用户管理

    LINUX是个多用户系统,一旦连接到网络中,它可以同时为多个登录用户提供服务.系统管理员可以随时了解系统中有那些用户,用户都在进行什么操作. 1.查看该系统在线用户 系统管理员若想知道某一时刻用户的行 ...