题意是寻找一个字符串的最大回文字串,最简单的是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 - 一题多解的更多相关文章

  1. LeetCode第[5]题(Java):Longest Palindromic Substring 标签:String、动态规划

    题目中文:求最长回文子串 题目难度:Medium 题目内容: Given a string s, find the longest palindromic substring in s. You ma ...

  2. leetcode-【中等题】5. Longest Palindromic Substring

    题目 Given a string S, find the longest palindromic substring in S. You may assume that the maximum le ...

  3. leetcode 第五题 Longest Palindromic Substring (java)

    Longest Palindromic Substring Given a string S, find the longest palindromic substring in S. You may ...

  4. leetcode第五题--Longest Palindromic Substring

    Problem:Given a string S, find the longest palindromic substring in S. You may assume that the maxim ...

  5. 【LeetCode每天一题】Longest Palindromic Substring(最长回文字串)

    Given a string s, find the longest palindromic substring in s. You may assume that the maximum lengt ...

  6. 【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 ...

  7. (python)leetcode刷题笔记05 Longest Palindromic Substring

    5. Longest Palindromic Substring Given a string s, find the longest palindromic substring in s. You ...

  8. LeetCode第五题:Longest Palindromic Substring

    Given a string s, find the longest palindromic substring in s. You may assume that the maximum lengt ...

  9. 刷题5. Longest Palindromic Substring

    一.题目说明 Longest Palindromic Substring,求字符串中的最长的回文. Difficuty是Medium 二.我的实现 经过前面4个题目,我对边界考虑越来越"完善 ...

随机推荐

  1. ODI中的CDC

    ODI中的CDC是通过一组所谓的日志知识模块(Journal Knowledge Module,JKM)实现的,在项目中加在了这些模块后,就可以在接口设计时选择全量数据,还是变化数据.   ODI共提 ...

  2. QT5.4 计算器程序 打包&发布,解决dll的最新解决方案(图文并茂,很清楚)

    QT写界面还是很不错,就是打包会比较麻烦,折腾了一天总算是打包完成了. QT软件的打包发布一个难点是必备dll文件的识别,现在高版本QT自带了一个windeployqt工具,直接会把需要的dll生成一 ...

  3. PASCAL的读入优化

    没readkey的情况 type Tstring=record s:array[0..maxn] of char; n:longint; end; procedure scan(var S:Tstri ...

  4. iOS 首次启动画面,新装或更新用户可以通过它查看简介。

    // // GuideViewController.h // Guide // // Created by twb on 13-9-17. // Copyright (c) 2013年 twb. Al ...

  5. 每天学点Linux:二

    关于输入输出和重定向: 默认情况下标准I/O的输入为键盘,输出为显示屏.输入和输出可以通过符号‘>’进行重定向. 例如可以通过命令:$>newfile 来创建一个新文件(如果newfile ...

  6. SGU 319 Kalevich Strikes Back(线段树扫描线)

    题目大意: n个矩形,将一个大矩形分成 n+1 块.矩形之间不重合,可是包括.求这n+1个矩形的面积 思路分析: 用线段树记录他们之间的父子关系.然后dfs 计算面积. 当给出的矩形上边的时候,就要记 ...

  7. 3. 表单输入框 在 IE 中 会有 “X” 和 类似wifi图标的图标出现

    原因: IE 自动给 input加了伪类 ::ms-clear 和 ::ms-reveal 解决: input::ms-clear, input::ms-reveal { display: none; ...

  8. SQL修炼道路上必看的书籍

    1 SQL应用重构 9787111263586 2 SQL 必知必会(第3版) 9787115162601 3 SQL Server 2005高级程序设计 9787115170798 4 SQL 解惑 ...

  9. java web分享ppt大纲 -- servlet容器简介

    今天在公司分享了java web的ppt,把ppt大纲放在这里,希望可以帮助需要的人 servlet容器简介 定义 狭义上的,servlet容器为java Web应用提供运行时环境,负责管理servl ...

  10. Android ListView 删除动画

    Android 的ListView在删除条目时,被删除的条目直接消失,比较生硬,在此实现一下删除动画,大家一起探讨:主要实现原理即是通过Animator来实现被删除条目的动画效果,然后在动画结束时通过 ...