acdream 1773 最長非回文串

2021-07-08 19:00:06 字數 808 閱讀 2516

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 ...