Leetcode5.Longest Palindromic Substring最长回文字串
给定一个字符串 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最长回文字串的更多相关文章
- 【LeetCode每天一题】Longest Palindromic Substring(最长回文字串)
Given a string s, find the longest palindromic substring in s. You may assume that the maximum lengt ...
- 5. Longest Palindromic Substring -- 最长回文字串
Given a string S, find the longest palindromic substring in S. You may assume that the maximum lengt ...
- [LeetCode] Longest Palindromic Substring 最长回文串
Given a string S, find the longest palindromic substring in S. You may assume that the maximum lengt ...
- LeetCode-5:Longest Palindromic Substring(最长回文子字符串)
描述:给一个字符串s,查找它的最长的回文子串.s的长度不超过1000. Input: "babad" Output: "bab" Note: "aba ...
- LeetCode5. Longest Palindromic Substring 最长回文子串 4种方法
题目链接:https://leetcode.com/problems/longest-palindromic-substring/ 题意很简单,就是求一个字符串得最长子串,这里的子串指连续的. 本文给 ...
- Leetcode 5. Longest Palindromic Substring(最长回文子串, Manacher算法)
Leetcode 5. Longest Palindromic Substring(最长回文子串, Manacher算法) Given a string s, find the longest pal ...
- [LeetCode] 5. Longest Palindromic Substring 最长回文子串
Given a string s, find the longest palindromic substring in s. You may assume that the maximum lengt ...
- 1. Longest Palindromic Substring ( 最长回文子串 )
要求: Given a string S, find the longest palindromic substring in S. (从字符串 S 中最长回文子字符串.) 何为回文字符串? A pa ...
- LeetCode:Longest Palindromic Substring 最长回文子串
题目链接 Given a string S, find the longest palindromic substring in S. You may assume that the maximum ...
随机推荐
- 2019-4-16-C#-使用反射获取私有属性的方法
title author date CreateTime categories C# 使用反射获取私有属性的方法 lindexi 2019-4-16 10:13:3 +0800 2018-09-26 ...
- 深度残差网络——ResNet学习笔记
深度残差网络—ResNet总结 写于:2019.03.15—大连理工大学 论文名称:Deep Residual Learning for Image Recognition 作者:微软亚洲研究院的何凯 ...
- 实现一个koa-logger中间件
//koa-logger.js module.exports = async(ctx,next)=>{ const start = new Date().getTime() // 中间件异步处理 ...
- IDEA2018激活码
请复制如下内容到文本编辑器(如notepad++)把博客的内容去掉 N757JE0KCT-eyJsaWNlbnNlSWQiOiJONzU3SkUwS0NUIiwibGljZW5zZWVOYW1lIjo ...
- Vue实例属性/方法/生命周期
一 实例属性 var app = new Vue(); app.$el ===>返回当前挂在DOM对象. app.$data ===>返回当前实例data里面的数据 app.$option ...
- cf519E
传送门 多组询问,问到树上两个点x,y距离相等的点的个数. 倍增求lca. //Twenty #include<cstdio> #include<cstdlib> #inclu ...
- 深喉起底APP线下预装市场,如何一夜间拥有千万用户
注:预装对于中国的移动互联网创业者有多重要?i黑马知道这样一个内幕,某商务告诉我他们公司的前2000万用户就是靠预装打下来的,总部在北京,直接派驻商务长期扎根在深圳搞定手机厂商.而这家公司初期发展得益 ...
- 利用GitHub来进行团队协作开发项目
首先: 1.项目组长要在GitHub创建一个仓库 2.组长git clone仓库地址到本地 3.组长在本地克隆到的项目里面创建一个Django项目 4.在当前项目下进行git add以及git ...
- js 打开app应用,如果没有安装就去下载
废话不多说,直接上代码 var APPCommon = { iphoneSchema: 'XingboTV://', iphoneDownUrl: 'https://itunes.apple.com/ ...
- Hadoop IO 特性详解(1)【数据完整性】
本文结合hadoop : the definitive guide精心而作,包含作者的心血,希望可以帮助大家理解一点hdfs的皮毛,足矣.(charles@xingbod.cn) hadoop本身自带 ...