Longest Palindromic Substring - 一题多解
题意是寻找一个字符串的最大回文字串,最简单的是n3方的算法,由于字符串最大长度为1000,所以这个方法很危险而且不科学。
紧接着想到的是一个n方的算法:回文子串是从中间向两边产生的,那么对于每个字符考察这个字符往外的所有可能不就可以找到以这个字符为中心的最长回文子串了吗?当然要考虑偶数的情况,即那个中心不在字母上,而这种情况的字符又一定满足中心的两个字符是相等的。所以在第一遍寻找奇数最长回文字符的时候记录下有可能形成偶数回文字符的数组下标,统一规定为两个字母下标较小的那个。
按照以上想法编码AC如下:
class Solution {
public:
string longestPalindrome(string s) {
string resstring;
int maxlen=;
int maxindex=;
int n=s.length();
int doublestring[];
if(n==)
return s;
for(int i=;i<n;i++)
{
int index=i;int delt=;
if(index-delt>=&&s[index-delt]==s[index])
doublestring[index-]=;
if(index+delt<n&&s[index+delt]==s[index])
doublestring[index]=;
while(index-delt>=&&index+delt<n){
if(s[index-delt]==s[index+delt])
{
if(delt*+>maxlen)
{
maxlen=delt*+;
maxindex=index;
}
delt++;
}
else
break;
}
}
int resa=maxlen;
for(int i=;i<n;i++)
{
if(doublestring[i]!=)
{
int index1=i;
int index2=i+;
int delt=;
while(index1-delt>=&&index2+delt<n){
if(s[index1-delt]==s[index2+delt])
{
if(delt*+>maxlen)
{
maxlen=delt*+;
maxindex=index1;
}
delt++;
}
else
break;
}
}
}
if(maxlen==resa)
{
int start=maxindex-(maxlen-)/;
resstring.append(s,start,maxlen);
}
else
{
int start=maxindex-(maxlen-)/;
resstring.append(s,start,maxlen);
}
//cout<<resstring<<endl;
return resstring;
}
};
这个方法有几个需要注意的地方:
1.对于字符数目为1的字符,直接返回不需进行处理。
2.在第一遍寻找奇数回文的时候,delt为1时不要在循环里面判断是否有对称的结构,如果在里面对于“abb”这种样例就无法通过
3.在第二遍寻找偶数回文的时候,delt应该从0开始,而非从1开始,这样才能判断出“bb”的样例。
4.C++的string字符串的append函数好方便,起始位置start,长度n给出,可以直接复制。
以上是我做这个题目的方法,我估计这个题目可以用动态规划解决,想了一会未果。动态规划真是脑力活,自己做的动规也比较少。
http://blog.csdn.net/feliciafay/article/details/16984031
这里有一篇介绍这个问题动态规划解法,至于他提到的O(n)方法。。不敢细看。
另外关于最长回文字串流行的解法是使用后缀树这个数据结构来做。
关于后缀树应用在这个问题的介绍附一个靠谱链接:
http://blog.csdn.net/g9yuayon/article/details/2574781
大致思路是使用后缀树然后找LCA(最近公共祖先),我估计把这个搞明白也要一会,还是继续先刷题吧。
里面还提到了graphviz这个画图工具,好像比visio画程序图更好用的样子。
http://www.graphviz.org/
随意看了看这方面的介绍,发现用这个Drawing graphs with dot文档入门比较靠谱。
Longest Palindromic Substring - 一题多解的更多相关文章
- LeetCode第[5]题(Java):Longest Palindromic Substring 标签:String、动态规划
题目中文:求最长回文子串 题目难度:Medium 题目内容: Given a string s, find the longest palindromic substring in s. You ma ...
- leetcode-【中等题】5. Longest Palindromic Substring
题目 Given a string S, find the longest palindromic substring in S. You may assume that the maximum le ...
- leetcode 第五题 Longest Palindromic Substring (java)
Longest Palindromic Substring Given a string S, find the longest palindromic substring in S. You may ...
- leetcode第五题--Longest Palindromic Substring
Problem:Given a string S, find the longest palindromic substring in S. You may assume that the maxim ...
- 【LeetCode每天一题】Longest Palindromic Substring(最长回文字串)
Given a string s, find the longest palindromic substring in s. You may assume that the maximum lengt ...
- 【LeetCode算法题库】Day2:Median of Two Sorted Arrays & Longest Palindromic Substring & ZigZag Conversion
[Q4] There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of th ...
- (python)leetcode刷题笔记05 Longest Palindromic Substring
5. Longest Palindromic Substring Given a string s, find the longest palindromic substring in s. You ...
- 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
一.题目说明 Longest Palindromic Substring,求字符串中的最长的回文. Difficuty是Medium 二.我的实现 经过前面4个题目,我对边界考虑越来越"完善 ...
随机推荐
- MySQL 用户登录与操作执行
一个用户可以不登录进Mysql 数据库,由两方面的因数决定 1.你是谁:也就是mysql 数据库中记录的用户名和密码,在SQL Server数据库,中只要求说明你是谁就可以登录了,可是mysql 不是 ...
- 走进Groovy (二)
承接上一篇,配置好环境后,开始正式学习语法.我假设看此文的同学至少会一定的JAVA语法,因此一些太过基础的就不记录了,基本上,大家看看示例就明白了. Groovy的卖点之一,就是全兼容JAVA的语法, ...
- Html小插件
1.天气预报插件 效果图: 源代码: <iframe width="650" scrolling="no" height="60" f ...
- Noip2013调试技巧
关于调试技巧,个人觉得还是很重要的,于是把自己之前写过的总结拿出来,修修补补再复习一下. F7 单步跟踪法 这是大家都最常用的调试方法,可以一步一步去跟踪程序的运行方向,以及各种变量的变化情况,当发现 ...
- req.body取不到值的问题;
随着express升级,bodyParser从express中被分离了出来,因此,在使用express新版本的时候,需要npm install body-parser 来安装bodyParser. 在 ...
- 在wdcp环境下架设VSFTPD虚拟用户只上传功能服务器
检查系统是否已安装vsftp rpm -q vsftpd package vsftpd is not installed #说明系统没有安装vsftpd 如果生成虚拟用户数据文件的时候出现以下错误 u ...
- OpenVPN多处理之-多队列TUN多线程
1.有一点不正确劲 在改动了那个TUN驱动后,我在想,为何我总是对一些驱动程序进行修修补补而从来不从应用程序找解决方式呢?我改动了那个TUN驱动,可是能保证我的改动对别的应用一样可用吗?难道TUN驱动 ...
- Web Service 入门例子
在网上很常见的一个列子,实现计算器,看完总得自己练练,不然一段时间不接触又忘了 新建一个空网页,因为.net framework 4.0 不能直接建web 服务,只能在项目中添加 然后在项目中添加We ...
- HDU2007-平方和与立方和
描述: 给定一段连续的整数,求出他们中所有偶数的平方和以及所有奇数的立方和. 代码: #include<stdio.h> #include<string.h> #include ...
- Linux 中 java 访问 windows共享目录
有两个方案: 1.将windows共享目录,挂载到linux系统下,通过使用本地目录访问windows共享目录 2.通过samba的java实现包,不过需要开个windows共享目录的账户 http ...