• 算法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;
        }
    };
    
  • 相关阅读:
    MongoDB的安全写入GetLastError
    mysql更新字段部分内容,连接条件过滤
    markdown 语法练习(样式输出)
    markdown 语法练习
    数据科学家访谈录 摘录(二)
    使用docker容器,创建镜像
    docker contioner报错:locale.Error: unsupported locale setting
    psql: FATAL: database "" does not exist 解决步骤
    ubuntu下docker 安装、使用mysql
    ubuntu使用crontab启动定时任务
  • 原文地址:https://www.cnblogs.com/impw/p/15728619.html
Copyright © 2020-2023  润新知