Lintcode-最长回文子串

问题描述:

给出一个字符串(假设长度最长为1000),求出它的最长回文子串,你可以假定只有一个满足条件的最长回文串。


image.png

问题分析:

中心扩展法
如果是一个回文序列,那么以这个序列中心字符展开的前缀和后缀都是一样的,因此,我们可以枚举中心位置,然后再在这个位置上扩展。记录并且更新得到最长的回文长度。

示例代码:

class Solution {
public:
    /**
     * @param s input string
     * @return the longest palindromic substring
     */
    string longestPalindrome(string& s) {
        // Write your code here
         static int flag=0,legth=0;
 int c=0,max=0,i,j;
        int n=s.size();
        if(s.size()==0) return 0;
        for(i=0;i<n;i++)
        {
            for(j=0;i-j>=0&&(i+j)<n;j++)
            {
                if(s[i-j]!=s[i+j])
                    break;
                c=j*2+1;
                
            }
            if(c>max)
                {
                    max=c;
                    flag=i;
                    legth=j-1;
                }
            for(j=0;i-j>=0&&(i+j+1)<n;j++)
            {
                if(s[i-j]!=s[i+j+1])
                    break;
                c=j*2+2;
                
            }
            if(c>max)
            {
                    legth=j-1;
                    max=c;
                    flag=i;
            }
        }
        string res;
        for(int t=flag-legth;t<flag-legth+max;t++)
        {
            res.push_back(s[t]);
        }
        return res; 

    }
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 版权声明:本文为博主原创文章,未经博主允许不得转载。 难度:容易 要求: 给出一个字符串(假设长度最长为1000)...
    柒黍阅读 269评论 0 0
  • 最长回文子串——Manacher 算法 1. 问题定义 最长回文字符串问题:给定一个字符串,求它的最长回文子串长度...
    林大鹏阅读 2,807评论 0 6
  • 上一篇KMP算法之后好几天都没有更新,今天介绍最长回文子串。 首先介绍一下什么叫回文串,就是正着读和倒着读的字符顺...
    zero_sr阅读 2,413评论 2 8
  • 字符串最长回文子串 题目描述: 给定一个字符串,求它的最长回文子串的长度。 分析和解法: 最容易想到的办法是枚举所...
    MinoyJet阅读 680评论 0 2
  • 问题定义 最长回文子串问题:给定一个字符串,求它的最长回文子串长度。 解法1:暴力解法 找到字符串的所有子串,判断...
    HITMiner阅读 732评论 0 2