给定一个字符串 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. 测试List对象排序

    实体类: package test; public class NightlyRate { private String rate; public String getRate() { return ...

  2. mybatis配合pagehelper分页助手查询

    Maven: 参考: springBoot2.x整合pagehelper5.1.2:https://blog.csdn.net/Carlson_Chis/article/details/8563748 ...

  3. Leetcode944. Delete Columns to Make Sorted删列造序

    给定由 N 个小写字母字符串组成的数组 A,其中每个字符串长度相等. 选取一个删除索引序列,对于 A 中的每个字符串,删除对应每个索引处的字符. 所余下的字符串行从上往下读形成列. 比如,有 A = ...

  4. [JZOJ5969] 世界线修理(欧拉回路)

    题目 描述 > 题目大意 给你两棵树,让你对每个点赋权,使得在两棵树中的任意子树的和绝对值为111. 比赛思路 其实我一开始理解错题意了-- 正解 首先,我们可以判断每个点权的奇偶性. 如果一个 ...

  5. JZOJ5870 【NOIP2018模拟9.15】地图

    题目描述 Description

  6. PHP--自动回调接口,分批修改数据

    /** * 修复 a表 生日格式问题 * @author qin */ public function update_birthday_one() { $this->load->model ...

  7. Trie性能分析之敏感词过滤golang

    package util import ( "strings" ) type Node struct { //rune表示一个utf8字符 char rune Data inter ...

  8. java udp协议DatagramSocket类使用

    package com.temp; import org.junit.Test; import java.io.*; import java.net.DatagramPacket; import ja ...

  9. 学习Python笔记---变量和简单数据类型

    首先声明,这个是个人在自学的一些笔记,因为是小白,刚接触Python,之前也没有过类似的经验,所以很多东西对于其他人来说可能是小白级别的,写出来没有其他的意思就是自己整理然后记录一下,顺便分享出来,而 ...

  10. leetcode 843. Guess the Word

    我做过的第一个 interactive problem 给一个候选词列表,每次猜测可以猜里面的词,会返回猜中匹配的个数, 可以猜10次, 加上随机化策略之后几乎可以一定通过测试(尽管不是100%) c ...