最長回文子串 說一道筆試熱題 最長回文子串

2021-10-12 18:27:17 字數 1561 閱讀 9114

leetcode 5 最長回文子串

輸入: "babad"輸出: "bab"注意: "aba" 也是乙個有效答案。
輸入: "cbbd"輸出: "bb"
1.暴力法

public string longestpalindrome(string s) 

}return ans;

}

2. 中心往兩邊擴充套件演算法你可能會問,為什麼會是 2n - 1 個,而不是 n 個中心?

因為回文的中心要區分單雙。

假如回文的中心為 雙數,例如 abba,那麼可以劃分為 ab bb ba,對於n長度的字串,這樣的劃分有 n-1 種。

假為回文的中心為 單數,例如 abcd, 那麼可以劃分為 a b c d, 對於n長度的字串,這樣的劃分有 n 種。

對於 n 長度的字串,我們其實不知道它的回文串中心倒底是單數還是雙數,所以我們要對這兩種情況都做遍歷,也就是 n+(n-1) = 2n - 1,所以時間複雜度為 o(n)。

當中心確定後,我們要圍繞這個中心來擴充套件回文,那麼最長的回文可能是整個字串,所以時間複雜度為 o(n)。

所以總時間複雜度為 o(n^2)

class solution ;else//找不到結果 將當前值存入雜湊map.put(nums[i],i);

}return new int;

}}

3.兩邊往中間演算法就是第乙個指標 u 遍歷所有的起點,第二個指標 v 從後往前遍歷,當兩個字元是相等的時候,逐一往前前進,直到他們相遇。

這個注意的是這裡加了兩行判斷的**,如果說當前字串即便是相遇的,還是比當前的結果小,那麼就沒必要做接下來的操作了,這樣的話也能減少一定的複雜度

if((y-x+1)<=res.length())//即便相遇也不可能是成為長度最大的字串

break;

class solution //相同就各自往前邁一步

if(u>=v && (y-x+1)>res.length())

res=s.substring(x,y+1);}}

return res;}}

leetcode day 1 題號1、2leetcode day 2 題號 3、4

快來加入每日一題演算法群

下期預告:

10.正規表示式的匹配

11.盛最多水的容器

程式設計題 最長回文子串

對於乙個字串,請設計乙個高效演算法,計算其中最長回文子串的長度。給定字串a以及它的長度n,請返回最長回文子串的長度。測試樣例 abc1234321ab 12返回 7 解題思路 法一 中心擴散法 時間複雜度o n 2 空間複雜度o n 遍歷每個字元,以該字元為中心,向前 後擴散,直到不滿足回文時停下。...

筆試覆盤 最長回文子串

回文串的經典題型 最長回文子串 回文串的長度可能是奇數,也可能是偶數,所以要分開考慮 abba 回文中心是bb之間的間隙 aba 回文中心是b 為了簡單化問題我們可以用乙個字串中沒出現過的字元來進行填充,讓它都變成長度為奇數的串,如 a b b a 後面都以此為例 然後再利用中心擴散的思想,求解 以...

每日一題 最長回文子串

給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb 取反轉字串,與原字串對比 例 aebcbe 第一大輪 第一小輪 aebcbe 與 ebcbea比較 第...