最牛的回文
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...