码迷,mamicode.com
首页 > 其他好文 > 详细

OJ模板库

时间:2015-07-20 10:57:58      阅读:111      评论:0      收藏:0      [点我收藏+]

标签:

最近刷了好几次的oj,好受伤好多都是类似的题目。

最长回文子串

string preprocess(string &str)
{
    string afterProcessStr="#";
    for(int i=0;i<str.size();++i)
    {
        afterProcessStr += str.substr(i, 1)+"#";
    }
    return afterProcessStr;
    //afterProcessStr.clear();
}
int maxpalindrome(string &str)
{
   string afterProcessStr=preprocess(str);
  // cout<<afterProcessStr<<endl;
   int maxEdge=0,center=0;
   int *p=new int[afterProcessStr.size()]();
   int ans=0;
   int cur=0;
   for(int i=1;i<afterProcessStr.size();++i)
   {
       p[i]=(maxEdge>i)?min(maxEdge-i,p[2*center-i]):0;
       while(i-1-p[i]>=0&&i+1+p[i]<afterProcessStr.size()&&afterProcessStr[i+1+p[i]]==afterProcessStr[i-1-p[i]])
          ++p[i];
          if(i+p[i]>maxEdge)
          {
              center=i;
              maxEdge=i+p[i];
          }
          if(p[i]>ans)
           ans=p[i];

   }
    return ans;
}

注意上文中preprocess函数会花费大量时间最好是采用预分配内存。

static string afterProcessStr(1000002*2,‘#‘);

具体见:http://blog.csdn.net/zhouyelihua/article/details/46964175

版权声明:本文为博主原创文章,未经博主允许不得转载。

OJ模板库

标签:

原文地址:http://blog.csdn.net/zhouyelihua/article/details/46964321

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!