zoukankan      html  css  js  c++  java
  • 算法38 5. 最长回文子串

    leetcode的提交不知道是不是有问题,我写的在本地跑起来比官方答案快,但是提交失败。

    我的思路

    正推,字符串首尾各放一指针,向中间查找相同项,找到后开始判断是否回文串,当两指针相遇判断结果,记录长度。并且第一个找到的回文串肯定是最大,所以前面的指针向前继续查找

    string longestPalindrome(string s) {
            int p,max;
            p=0;//标记最长子串的指针
            max=1;//记录最大值
            for(int i=0;i<s.size()-1;i++){
                for(int j=s.size()-1;j>i;j--){
                    bool q=0;//当找到回文串结束j循环
    
                    if(s[i]==s[j]){//找到回文串边界,开始判断
                        for(int y=i,z=j;z>=y;y++,z--){
                            if(s[y]!=s[z]) break;
                            if(y==z||y==z-1)//结束判断,记录大小
                                if(j-i+1>max){ 
                                    p=i;
                                    max=j-i+1;
                                    q=1;
                                }   
                        }
    
                    }
                    if(q) j=i;//找到回文串
                }
            }
            return s.substr(p,max);
        }
    

    中心扩展法

    class Solution {
    public:
        string longestPalindrome(string s) {
            int len=s.size();
            if(len==0||len==1)
                return s;
            int start=0;//记录回文子串起始位置
            int end=0;//记录回文子串终止位置
            int mlen=0;//记录最大回文子串的长度
            for(int i=0;i<len;i++)
            {
                int len1=expendaroundcenter(s,i,i);//一个元素为中心
                int len2=expendaroundcenter(s,i,i+1);//两个元素为中心
                mlen=max(max(len1,len2),mlen);
                if(mlen>end-start+1)
                {
                    start=i-(mlen-1)/2;
                    end=i+mlen/2;
                }
            }
            return s.substr(start,mlen);
            //该函数的意思是获取从start开始长度为mlen长度的字符串
        }
    private:
        int expendaroundcenter(string s,int left,int right)
        //计算以left和right为中心的回文串长度
        {
            int L=left;
            int R=right;
            while(L>=0 && R<s.length() && s[R]==s[L])
            {
                L--;
                R++;
            }
            return R-L-1;
        }
    };
    
  • 相关阅读:
    Building a flexiable renderer
    Indirect Illumination in mental ray
    我的心情
    Cellular Automata
    Subsurface Scattering in mental ray
    Shader Types in mental ray
    BSP Traversal
    我的渲染器终于达到了MR的速度
    How to handle displacement and motion blur
    说明
  • 原文地址:https://www.cnblogs.com/impw/p/15728619.html
Copyright © 2011-2022 走看看