基本的回文串練習

2021-09-27 07:18:31 字數 978 閱讀 4505

啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊我好激動啊!!!!!

我竟然a了!!!!!

好吧,其實這是一道模板題。(要用manacher來做(其實我覺得這演算法名挺好記))

首先,我們發現回文串的長度有奇偶性,為了方便計算,我們在原串上每兩個字元中間新增乙個另外的字元,使原串變為奇數串。我們又發現,由於這道題玄學的 資料,0號位和n*2+2號位必須有其他的亂七八糟的值(不然會多算)。

先上馬吧!

#include

#include

#include

using

namespace std;

const

int h =

1202

;struct node ans[h]

;char s[h]

;int n, len[h <<1]

, t[h <<1]

;string tmp;

void

init()

void

manacher()

while

(t[i - len[i]

]== t[i + len[i]])

len[i]++;

}if(i + len[i]-1

>= r)}}

intmain()

return0;

}

讓我們好好研讀這份**:

mid表示以mid為中心向外延伸的字串,r表示中心為mid的最長回文串的右邊界,len陣列儲存中心為i的最長回文串的半徑(包含點i)。

繼續看看這個遞推式:

首先我們知道,i是一定嚴格大於mid的。所以如果i至於函式最後的賦值,大於等於和大於都沒毛病。(請手推)

另外,我那清奇的碼風得歸功於一組資料:

111

ans:

1111

111

好了,我已經心力交瘁了,拜拜!

基本演算法練習 回文串

問題描述 即通過加乙個字元,使得字串是否滿足回文串的要求。如下 include include include using namespace std int main string str cin str bool flag false for int i 0 is1 for int j 0 j本...

Python練習 回文字串的判斷

剛開始學python,很多基本方法還不太會用,借用mooc課的練習題目記錄學習。題目內容 給定乙個字串,判斷它是否是回文字串 即類似於peep,12321這樣的對稱字串 如果是輸出true,不是則輸出false。判斷過程中假定只考慮字母和數字字元,而且忽略字母的大小寫和其它符號 如空格 標點符號等 ...

leetcode練習 最長回文子串

給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。示例一 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案 示例二 輸入 cbbd 輸出 bb 通過substring劃分子串,遍歷所有可能結果。結果效率太低 如圖 class solution ret...