題解 最長回文串

2021-10-08 07:10:23 字數 1069 閱讀 2503

給定乙個字串 s ,找到 s 中最長的回文子串,輸出其長度。

你可以假設 s 的最大長度為 3000。

第1行:1個字串

樣例輸入

babad

樣例輸出

對於乙個字串s[l,r],他的最長回文字串有如下兩種情況

1.若s[l] == s[r] 且 s[l+1,r-1]為回文字串,則s[l,r]會變為更長的乙個回文字串

2.否則在s[l,r-1]和s[l+1,r]之間必有乙個最長的不超過r-l的回文字串

湊字數的

問題來了

如何才能判斷s[l,r]為回文字串呢?

大家當然可以迴圈搜尋,用乙個二維陣列(清為-1)記錄

初始值:interval[i,i] (i=1~n)=1

當interval[l+1,r-1]=-1,搜尋;

當interval[l+1,r-1]=1,返回值true,如果s[l]==s[r],那麼interval[l,r]=1;

當interval[l+1,r-1]=0,返回值false,interval[l,r]=0。

也可以用dp[l,r]是否等於l-r+1來o(1)判斷(**展示此方法)

#include #include #include using namespace std;

const int m = 3e3 + 5;

char a[m];

int f[m][m];

int len;

void read()

len = temp;

}int main()

for(int i = 2; i <= len; i ++)

else

} }printf("%d", f[1][len]);

return 0;

}

題解 最長回文子串

剛學完字尾陣列,用這道題來練練 sa 題目右 ural 1297 題意如題目,即給出乙個字串 s 求 s 的最長回文子串。s leqslant1000 既然剛學了字尾陣列,自然使用字尾陣列做啦。但如何將問題轉化為乙個 sa 問題呢 先來觀察一下下面這個字串的回文子串吧。rt,可以發現,回文子串 ba...

最長回文串

輸入乙個字串,求出其中的最長回文字串,樣例輸入 confucicss say madam,i m asam。樣例輸出 masam,i m asam。這個題首先要判斷最長那個回文串的位置,並且與大小寫無關,用到函式 toupper 然後輸出後面的字串。include include include i...

最長回文串

時間限制 1000ms 單點時限 1000ms 記憶體限制 64mb 描述 小hi和小ho是一對好朋友,出生在資訊化社會的他們對程式設計產生了莫大的興趣,他們約定好互相幫助,在程式設計的學習道路上一同前進。這一天,他們遇到了一連串的字串,於是小hi就向小ho提出了那個經典的問題 小ho,你能不能分別...