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个题目,我对边界考虑越来越"完善 ...
随机推荐
- Multiwii 代码解读
GPS部分 GPS_angle[ROLL] = (nav[LON]*cos_yaw_x - nav[LAT]*sin_yaw_y) /10;GPS_angle[PITCH] = (nav[LON ...
- VC++深入详解-第五章学习心得
这一章节主要讲解了文本相关的一些编程 插入符的使用 CreateSolidCaret(100,200);//插入符的宽度和高度 ShowCaret(); 插入符的一般使用方法 int CTestVie ...
- 我的MYSQL学习心得 mysql的权限管理
这一篇<我的MYSQL学习心得(十三)>将会讲解MYSQL的用户管理 在mysql数据库中,有mysql_install_db脚本初始化权限表,存储权限的表有: 1.user表 2.db表 ...
- 【hadoop】14、hadoop2.5的mapreduce的 配置
配置mapreduce <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href ...
- externkeyword放到函数体内而导致的linkage问题
不少人都知道,C/C++语言编程时,假设要引用在别的C/C++文件里定义的变量或函数,必须extern一下,才干使用 另一些人知道,这个extern事实上能够放在函数体内声明,这么做的理由是不想让其它 ...
- 关于javascript的沙箱模式以及缓存方法
在javascript函数代码中,经常会不经意出现全局变量,很可能造成对全局对象的污染,由于这种弊端的存在,那么沙箱模式油然而生.沙箱模式又称为沙盒模式.隔离模式.在js中只有函数可以限定变量作用域, ...
- 转 c#代码访问https服务器以及https的webservice
最近公司做到WebService项目,但是要通过Https调用,自己在网上搜了半天,终于实现了服务端的Https,但是一直没有找到客户端如何实现,今天终于看到这篇文章,随手记录下来. 具体代码如下: ...
- ajax联动
1.编写html代码,引入ajax文件 <script type="text/javascript" src="js/ajax.js"></s ...
- HDU 5226 Tom and matrix(组合数学+Lucas定理)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5226 题意:给一个矩阵a,a[i][j] = C(i,j)(i>=j) or 0(i < ...
- BZOJ 1668: [Usaco2006 Oct]Cow Pie Treasures 馅饼里的财富( dp )
dp , dp[ i ][ j ] = max( dp[ k ][ j - 1 ] ) + G[ i ][ j ] ( i - 1 <= k <= i + 1 , dp[ k ][ j - ...