bit 最牛的回文

2022-02-09 12:46:53 字數 1490 閱讀 8865

最牛的回文

description

據說,如果有無窮多的母牛和無窮多的大型鍵盤,它們就可以創造出世界上最偉大的回文。在尋找回文時,可以不計文中的標點、空白和大小寫,只要關注 26 

個英文本母就可以了。但是要注意,在輸出時要按照原樣,也就是要保留原有的空白、標點和大小寫。

你的任務,就是在不超過 20000 

個字元的字串中,尋找長度不超過 

2000 

的回文字串(含空格和標點時)。

input

一段文字,不超過 20000 

個字元,可以有一行或多行,每行的長度不超過 

80 個字元。

output

輸出的第一行為找到的最長的回文字串的長度。後面的行應該包括該字串,字串兩邊多餘的空格和標點都不需要輸出,但字串中的空格、標點和換行則需要按照原樣輸出。

如果文中有多個長度相同的回文字串,只要輸出第乙個就可以了。

sample input

sonic: makam, i'm akam.

sample output

11makam, i'm akam

分析:最長回文串問題,利用manacher演算法複雜度為o(n)。關鍵在找最長時,要注意回文半徑和實際回文長度的區別。另外就是通過穿插字元使回文長度奇偶統一化。

#include#include

#define maxn 40010

char a[maxn], b[maxn], c[maxn * 2

];int pos[maxn], r[maxn * 2

];int

len1, len2, len3;

intmain()

for (i = 0; i < len1; ++i)

else

if (a[i] >= '

a' && a[i] <= 'z'

) }

for (i = 0; i < len2; ++i)

c[0] = '~'

;

for (i = 0; i < len2; ++i)

c[2 * len2] = '@'

; len3 = len2 * 2 + 1

; j = 0

;

for (i = 1; i < len3 - 1; i +=k)

j = r[i] - k > 0 ? (r[i] - k) : 0

; }

maxr = -1

;

for (i = 1; i < len3 - 1; ++i)

}else}}

printf(

"%d\n

", maxr);

for (i = start; i <= end; ++i)

printf("%c

", a[i]);

printf("\n

");return0;

}

史上最牛的面試

1.你為什麼來應聘這份工作。答 以前俺是乙隻迷途的騾子,現在可算找到組織了。2.你是怎麼知道我們招聘這個職位的呢?答 乙個合格的員工除了要有騾子般的身體以外,還必須有獵狗一樣的嗅覺。3.我們為什麼要聘你呢?答 俺吃的少,拉的多。4.你認為自己最大的優點是什麼?答 像騾子一樣吃苦,像工蜂一樣耐勞,像獵...

牛客 最長回文

傳送門 有兩個長度均為n的字串a和b。可以從a中選乙個可以為空的子串a l1 r1 b中選乙個可以為空的子串b l2 r2 滿足r1 l2,然後把它們拼起來 a l1 r1 b l2 r2 求用這樣的方法能得到的最長回文串的長度。注意 求的不是本質不同的回文串個數哦!對兩個串分別跑manacher,...

shell 最簡單最牛逼的備份指令碼!!

紅色方框裡為指令碼呼叫格式,下面來看看我用這個指令碼實現的功能 之前忘記把指令碼 粘出來現在給補上 bin bash www shell backups.sh test www backups mysql www mysql 3306 data test 7 backups mysql prefix...