【LeetCode 5】 最长回文子串
题目链接
描述
【题解】
[一个讲得比较好的博客地址](https://www.cnblogs.com/lykkk/p/10460087.html);
感觉manacher算法的大概思路就是利用回文串左右对称的性质。
利用之前算出来的以某个点为中心的回文串。而当前要枚举的串被包括在其中。
则可以用左半部分的结果来获取右边当前的串的结果。
O(N)
当然也可以枚举中间点在哪个地方然后O(N^2)求。
【代码】
class Solution {
public:
const int N = 1000;
string getSpecialString(string s){
string temp = "#";
int len = s.size();
for (int i = 0;i < len;i++){
temp = temp + s[i];
temp = temp + "#";
}
return temp;
}
string longestPalindrome(string s) {
int p[N*2+10];
memset(p,0,sizeof p);
s = getSpecialString(s);
int ma = -1,id = -1;
int len = s.size();
for (int i = 0;i < len;i++){
if (i>ma){
p[i] = 1;
}else{//i<=ma
//这种情况里面也有可以继续扩展的情况
p[i] = min(ma-i+1,p[2*id-i]);
}
while (i-p[i]>=0 && i+p[i]<len && s[i-p[i]]==s[i+p[i]]){
if (i+p[i]>ma){//更新最右边界
ma = i+p[i];
id = i;
}
p[i]++;
}
}
int ansindex = 0;
for (int i = 1;i < len;i++)
if (p[ansindex]<p[i]){
ansindex = i;
}
string t = "";
for (int i = ansindex-p[ansindex]+1;i<=ansindex+p[ansindex]-1;i++){
if (s[i]!='#'){
t+=s[i];
}
}
return t;
}
};
【LeetCode 5】 最长回文子串的更多相关文章
- LeetCode:最长回文子串【5】
LeetCode:最长回文子串[5] 题目描述 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为1000. 示例 1: 输入: "babad" 输出: ...
- 【LeetCode】最长回文子串【动态规划或中心扩展】
给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad"输出: "bab"注意: " ...
- Java实现 LeetCode 5 最长回文子串
5. 最长回文子串 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab&quo ...
- [LeetCode] 5. 最长回文子串 ☆☆☆(最长子串、动态规划)
最长回文子串 (动态规划法.中心扩展算法) https://leetcode-cn.com/problems/longest-palindromic-substring/solution/xiang- ...
- 【LeetCode】最长回文子串-中心扩展法
[问题]给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 : 输入: "babad" 输出: "bab" 注意: ...
- leetcode python最长回文子串
回文的意思是正着念和倒着念一样,如:上海自来水来自海上,雾锁山头山锁雾,天连水尾水连天 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: & ...
- [LeetCode] 5. 最长回文子串
题目链接:https://leetcode-cn.com/problems/longest-palindromic-substring/ 题目描述: 给定一个字符串 s,找到 s 中最长的回文子串.你 ...
- LeetCode 05 最长回文子串
题目 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab" 注意: ...
- 【LeetCode】最长回文子串-动态规划法
[问题]给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 : 输入: "babad" 输出: "bab" 注意: ...
- [leetCode]5. 最长回文子串(DP)
题目 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 题解 dp.先初始化长度为1和长度为2的串.再依次算长度为3,4,5.... 当找到回文串时,若长度比当 ...
随机推荐
- PHP chgrp() 函数
定义和用法 chgrp() 函数改变指定文件的用户组. 如果成功则返回 TRUE,如果失败则返回 FALSE. 语法 chgrp(file,group) 参数 描述 file 必需.规定要检查的文件. ...
- jdbc blob插入及查询操作
首先建一张表 create table picture( picId ) primary key not null, picName ) not null, picfile image null ) ...
- Wireshark协议分析1
一.界面简介 1.抓包工具栏 2.文件工具栏 3.包定位工具栏 4.颜色以及滚动界面工具栏 5.数据包列表字体定义工具栏 6.首选项工具栏 二.过滤规则 1.过滤 IP ip.src eq 192 ...
- mysql5.6配置详解
系统 4核 16G Centos6.5 x64 优化后测试结果如下 #mysqlslap #--concurrency=2 #--iterations=1 #--number-int-cols=10 ...
- 机器学习算法--Elastic Net
1) alpha : float, optional Constant that multiplies the penalty terms. Defaults to 1.0. See the note ...
- mysql分表分库 ,读写分离
1.分表 当项目上线后,数据将会几何级的增长,当数据很多的时候,读取性能将会下降,更新表数据的时候也需要更新索引,所以我们需要分表,当数据量再大的时候就需要分库了. a.水平拆分:数据分成多个表 b. ...
- jmeter压测、操作数据库、分布式、 linux下运行的简单介绍
一.jmeter压测 1.如何压测 常规性能压测:10-15分钟 稳定性测试:一周.2天等 如果想要压测10分钟,勾选永远,勾选调度器,填写600秒.也可以使用固定启动时间. 2.tps.响应时间 ( ...
- 转 Jmeter参数化--Post请求的Post body 参数化
2018年01月22日 15:40:58 java2013liu 阅读数:2361收起 个人分类: Jemter 一.使用body data设置参数: 1,首先,使用Fiddler录制post请求 ...
- c# SqlBulkCopy实现批量从数据集中把数据导入到数据库中
今天遇到了一个导入类第一次见 SqlBulkCopy 可以实现从一个数据集导入到数据库中的表中 本来想从数据集中一条条遍历insert到库中 有了这个后发现: 只在把表与数据集的列做一下对应关系,再走 ...
- windows下虚拟环境的安装与创建
使用虚拟环境的好处: 可以方便的解决不同项目对类库的依赖问题. 可以在系统中Python解释器中避免包的混乱和版本的冲突. 为每个程序单独创建虚拟环境,可以保证程序只能访问虚拟环境中的包,保持全局解释 ...