首页 > 代码库 > Longest Palindromic Substring 解题报告
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;}
Longest Palindromic Substring 解题报告
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。