problem description
回文串大家都知道是什麼吧~
現在給你一串字串
請求出該字串最長的連續非回文子串的長度是多少。
input
長度不超過10^6。題目保證字串只由小寫字母a-z組成。
output
乙個整數,表示最長非回文串的長度。若不存在輸出-1。
sample input
aaaba
sample output
5o(n)演算法
先用 manacher(馬拉車演算法)計算出最長回文子串長度;
如果等於串長分兩種情況:1.整串相同,那麼直接輸出「-1」;2.如果不是整串相同,僅僅只是回文串,那麼就輸出串長減去一;
如果子串不等於串長:輸出串長就好了;
#include#include#include#include#include#include#include#include#include#define inf 99999999
using namespace std;
const int max=1100000+10;
char s[max*2];
int p[max*2];
int f(char s)
s[0]='*';
for(int i=2;i<2*len+1;++i){
if(p[id]+id>i)p[i]=min(p[2*id-i],p[id]+id-i);
else p[i]=1;
while(s[i-p[i]] == s[i+p[i]])++p[i];
if(id+p[id]
動態規劃 最長非降子串行
先分享一篇文章 動態規劃 從新手到專家 作者正是通過這篇文章來學習的。文中對動態規劃的設計思想做了非常詳細的介紹,並通過簡單問題和複雜問題對動態規劃的設計流程進行剖析,以下是作者和出處 先介紹下問題,給定長度為n的整數序列 a 1 a 2 a n 求得其中最長非降子串行的長度,即lis longes...
最長非遞減子串行的應用
description 我們有乙個數列a1,a2.an,你現在要求修改數量最少的元素,使得這個數列嚴格遞增。其中無論是修改前還是修改後,每個元素都必須是整數。請輸出最少需要修改多少個元素。input 第一行輸入乙個 t 1 leq t leq 10 表示有多少組資料 每一組資料 第一行輸入乙個 n ...
最長上公升子串行(非連續)
最長上公升子串行 lis 的典型變形,熟悉的n 2的動歸會超時。lis問題可以優化為nlogn的演算法。定義d k 長度為k的上公升子串行的最末元素,若有多個長度為k的上公升子串行,則記錄最小的那個最末元素。注意d中元素是單調遞增的,下面要用到這個性質。首先len 1,d 1 a 1 然後對a i ...