Leetcode 5 最長回文子串

2021-10-01 03:14:25 字數 1083 閱讀 1737

給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。

詳細了解檢視

class

solution

return s.

substr

(start, maxlen);}

void

searchpalindrome

(string s,

int left,

int right,

int& start,

int& maxlen)

if(maxlen < right - left -1)}};

substr函式的解析

第二種解法

我們也可以不使用子函式,直接在乙個函式中搞定,我們還是要定義兩個變數 start 和 maxlen,分別表示最長回文子串的起點跟長度,在遍歷s中的字元的時候,我們首先判斷剩餘的字元數是否小於等於 maxlen 的一半,是的話表明就算從當前到末尾到子串是半個回文串,那麼整個回文串長度最多也就是 maxlen,既然 maxlen 無法再變長了,計算這些就沒有意義,直接在當前位置 break 掉就行了。否則就要繼續判斷,我們用兩個變數 left 和 right 分別指向當前位置,然後我們先要做的是向右遍歷跳過重複項,這個操作很必要,比如對於 noon,i在第乙個o的位置,如果我們以o為最中心往兩邊擴散,是無法得到長度為4的回文串的,只有先跳過重複,此時left指向第乙個o,right指向第二個o,然後再向兩邊擴散。而對於 bob,i在第乙個o的位置時,無法向右跳過重複,此時 left 和 right 同時指向o,再向兩邊擴散也是正確的,所以可以同時處理奇數和偶數的回文串,之後的操作就是更新 maxlen 和 start 了,跟上面的操作一樣,參見**如下:

class

solution

if(maxlen < right - left +1)

}return s.

substr

(start, maxlen);}

};

LeetCode5最長回文子串

給定乙個字串s,找到s中最長的回文子串。你可以假設s長度最長為1000。示例 輸入 babad 輸出 bab 注意 aba 也是有效答案示例 輸入 cbbd 輸出 bb 動態規劃來做,每個回文字串的子字串也是回文字串,即string是回文字串那麼它的string.substring 1,lenth ...

LeetCode 5 最長回文子串

問題描述 給定乙個字串s,找到s中最長的回文子串。你可以假設s的最大長度為1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb 解決方案 中心擴充套件演算法 事實上,只需使用恆定的空間,我們就可以在 o n 2 的時間內解決這個問題...

leetcode5 最長回文子串

遞推式 1 一般 s i 1 s j 1 and j i and j i len s i 1,j 1 2 初始化dp矩陣對角線的值為 true,相鄰兩個元素相等時dp i i 1 為true 初始化回文串起始位置和長度。def longestpalindrome s n len s if s ret...