zoukankan      html  css  js  c++  java
  • Longest Palindromic Substring 解题报告

      使用马拉车算法,时间复杂度为O(n),算法详细解释在上一篇文章中。 

    //
    //  main.cpp
    //  Longest Substring
    //
    //  Created by Bowie Hsu  on 14/11/21.
    //  Copyright (c) 2014年 Bowie Hsu . All rights reserved.
    //
    
    #include <iostream>
    #include <string>
    #include <sstream>
    #include <vector>
    #include "stdio.h"
    #include "ctype.h"
    using namespace std;
    
    class Solution {
    public:
        //预处理,将#号加入到原有的string中
        string preprosess(string s)
        {
            int n=s.length();
            //string oss;
            stringstream oss;  //调用sstream中的stringstream
            oss << '^';
            for (int i=0; i<n; ++i)
                oss<<"#"<<s[i];
                oss<<'#';
                oss<<'$';
                return oss.str();
            
        }
        
        string longestPalindrome(string s) {
          
            string output;
            int mx=0;
            int id=0;
            string l=preprosess(s);
            int n=l.length();
            int *p=new int[n];
            //Manacher算法
            for(int i=1;i<n-1;++i)
            {
              //简便写法
              p[i]=(mx>i)?min(mx-i, p[2*id-i]):1;
                
              while(l[i+p[i]]==l[i-p[i]])
                 ++p[i];
              if(p[i]+i>mx)
             {
                 mx=p[i]+i;
                 id=i;
             }
            }
            //找到最大字串的位置与个数
            int maxnum=0;
            int center=0;
            for (int i=1;i<n-1; ++i)
            {   if(p[i]>maxnum)
            {
                maxnum=p[i];
              center=i;
            }
            }
        return s.substr((center-maxnum)/2,maxnum-1); //返回一个string
        }
       
    };
    
    int main()
    {
        string input="ccd";
        string ans;
        Solution x;
        ans=x.longestPalindrome(input);
        cout<<ans<<endl;
    }
  • 相关阅读:
    jade反编译,把html编译成jade
    runtime环境下的jade
    jade过滤器
    jade-render-renderFile
    【[USACO17DEC]Standing Out from the Herd】
    bzoj 1396: 识别子串
    bzoj 4327:JSOI2012 玄武密码
    hihocoder 后缀自动机四·重复旋律6
    hihocoder 后缀自动机四·重复旋律7
    【[CTSC2012]熟悉的文章】
  • 原文地址:https://www.cnblogs.com/bowiehsu/p/4125934.html
Copyright © 2011-2022 走看看