最長回文子串 解法一

2021-07-25 12:23:27 字數 646 閱讀 3383

其實最最簡單的演算法,也是效率最低的應該就是列舉子串,不過在這裡沒有必要拿來寫

解法一是在列舉子串上優化的

我們用[a,b]來表示子串,即從位置a到位置b的子串

假設現在我們已經知道了子串[x,y]不是回文串,那麼[x-1,y+1],[x-2,y+2]….[x-n,y+n]還有可能是回文串嗎? 當然不可能!!

所以我們的解法一就是遍歷一遍字串,然後分別計算以每個位置為中心的最長回文串的長度,最後選取其中的最大值就可以了

這樣的話,複雜度大概就是o(n^2),雖然不是很好,但比列舉子集要好太多了。

下面附上**:

#include 

#include

#include

#include

using

namespace

std;

const

int max_n = 1e6 + 1;

char s[max_n];

//計算以指定位置為中心點的最長回文串

int find(int x)

return sum;

}int main()

printf("%d\n",ans);

}return

0;}

最長回文子串解法

沒咋麼過腦子,瞬間能想到的思路大概為 abcabcbb 比如這個字串 首先 宣告乙個陣列 裡面存放各種開分來的字串 切分條件是當這次迴圈的值 存在於當前的陣列中 像這樣abc bca cab abc bcb cb 最初的實現 var str 生成一些隨機字元 for var i 0 i 100000...

最長回文子串的解法

1 暴力法 最容易想到的就是暴力破解,求出每乙個子串,之後判斷是不是回文,找到最長的那個。求每乙個子串時間複雜度o n 2 判斷子串是不是回文o n 兩者是相乘關係,所以時間複雜度為o n 3 string findlongestpalindrome string s if tmp1 tmp2 j ...

最長回文子串兩種解法

刷leetcode.給定乙個字串s,找到s中最長的回文子串。你可以假設s的最大長度為 1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb 思路 遍歷每乙個字元,以字元為中心,將字串對折,如果對應的字元相等,則可以確認該字串為回文串...