zoukankan      html  css  js  c++  java
  • leetcode 5 Longest Palindromic Substring(Manacher算法求最长回文串)

    应用一下manacher算法就可以O(n)求出结果了。可以参考hdu3068

    substr(start,length)函数是这样用的:

    substr 方法
    返回一个从指定位置开始,并具有指定长度的子字符串。
    参数
    start
    必选。所需的子字符串的起始位置。字符串中第一个字符的索引为 0。
    length
    可选项。返回的子字符串中包含的字符数。
    备注
    如果 length 为 0 或负数,将返回一个空字符串。如果没有指定该参数,则子字符串将延续到字符串的结尾。
    class Solution {
    public:
        int min(int a,int b){
            return a<b?a:b;
        }
        string longestPalindrome(string s) {
            int len=s.length();
            int p[len<<1|1];
            memset(p,0,sizeof(p));
            string st;
            for(int i=0;i<len;i++){
                st+='#'+s.substr(i,1);
            }
            st+='#';
            //cout<<st<<endl;
            len=len*2+1;
            int wid=0,id=0,Max=0,ans=0;
            for(int i=1;i<len;i++){
                if(i<wid){
                    p[i]=min(p[2*id-i],wid-i);
                }
                else p[i]=1;
                for(;i-p[i]>=0&&st[i+p[i]]==st[i-p[i]];p[i]++);
                //cout<<p[i]<<endl;
                if(i+p[i]>wid){
                    wid=i+p[i];
                    id=i;
                }
                if(p[i]-1>Max){
                    ans=i;
                    Max=p[i]-1;
                }
            }
            //cout<<ans<<' '<<Max<<endl;
            return s.substr((ans-Max)/2,Max);
        }
    };
  • 相关阅读:
    18网三袁昳 实验三
    18网三袁昳 网络对抗技术实验二
    18网三袁昳 网络对抗技术实验一
    实验六
    实验五(18网三43号)
    实验四 18网三43号
    实验三(18网三43号)
    实验二(18网三43号袁昳)
    实验一(18网三43号)
    实验四(恶意代码技术)
  • 原文地址:https://www.cnblogs.com/zywscq/p/4895310.html
Copyright © 2011-2022 走看看