最長回文子串模板

2022-03-03 19:38:24 字數 1110 閱讀 4755

這裡先提前注意一下,子串和子串行是兩個不同的東西:

回文串是面試常常遇到的問題(雖然問題本身沒啥意義),本文就告訴你回文串問題的核心思想是什麼。

首先,明確一下什:回文串就是正著讀和反著讀都一樣的字串

比如說字串abaabba都是回文串,因為它們對稱,反過來還是和本身一樣。反之,字串abac就不是回文串。

可以看到回文串的的長度可能是奇數,也可能是偶數,這就新增了回文串問題的難度,解決該類問題的核心是雙指標。下面就通過一道最長回文子串的問題來具體理解一下回文串問題:

下面,就來說一下如何使用雙指標。

尋找回文串的問題核心思想是:從中間開始向兩邊擴散來判斷回文串。對於最長回文子串,就是這個意思:

for 0 <= i < len(s):

找到以 s[i] 為中心的回文串

更新答案

但是呢,我們剛才也說了,回文串的長度可能是奇數也可能是偶數,如果是abba這種情況,沒有乙個中心字元,上面的演算法就沒轍了。所以我們可以修改一下:

for 0 <= i < len(s):

找到以 s[i] 為中心的回文串

找到以 s[i] 和 s[i+1] 為中心的回文串

更新答案

**實現
string palindrome(string &s, int left, int right)

// 返回以s[left]和s[right]為中心的最長回文串

return s.substr(left + 1, right - left - 1);

}string longestpalindrome(string s)

return ans;

}

至此,這道最長回文子串的問題就解決了,時間複雜度 o(n^2),空間複雜度 o(1)。

值得一提的是,這個問題可以用動態規劃方法解決,時間複雜度一樣,但是空間複雜度至少要 o(n^2) 來儲存 dp table。這道題是少有的動態規劃非最優解法的問題。

最長回文子串 最長回文子串行

1.最長回文子串行 可以不連續 include include include include using namespace std 遞迴方法,求解最長回文子串行 intlps char str,int i,int j intmain include include include using n...

最長回文子串

描述 輸入乙個字串,求出其中最長的回文子串。子串的含義是 在原串連續出現的字串片段。回文的含義是 正著看和倒著看是相同的,如abba和abbebba。在判斷是要求忽略所有的標點和空格,且忽略大小寫,但輸出時按原樣輸出 首尾不要輸出多餘的字串 輸入字串長度大於等於1小於等於5000,且單獨佔一行 如果...

最長回文子串

輸入乙個字元,求出其中最長的回文子串。子串的含義是 在元串中連續出現的字串片段。回文的含義是 正看和倒看相同,如abba和yyxyy,在判斷時候應該忽略所有的空格和標點符號,且忽略大小寫,但輸出應該保持原樣,輸入的字元長度不超過5000,且佔據單獨一行,輸出最長的回文子串 如有多個,輸出,起始位置最...