Leetcode第5題 最長回文子串C 解法

2021-10-19 14:28:28 字數 934 閱讀 7423

沒動態規劃出來,就做不出來……

class

solution

dp[0]

[0]=

1;for(

int i=n-

2;i>=0;

--i)}}

return s.

substr

(pos,len);}

};

這種做法dp陣列的i和j分別代表回文串兩端的序號。官方解法則是從字串長度和首序號出發。區別在於i、j如果是兩段的序號的話,空間複雜度可以優化到o(n)。

實際上一開始我的做法是,先反轉字串,但是這種思路沒做出來

再然後我想的是一遍遍歷得出結果,異想天開了,思路是從頭到尾分奇數回文串和偶數回文串分別進行驗證

看了答案才知道以上兩種都是可以做出來的。比較原字串和反轉字串的話,相當於求最長公共子串,而我還陷在最長公共子串行裡面,自然得不出來。

分別求奇數和偶數串則是陷入到一遍遍歷裡面,前面的結果會干擾到後面的結果的,正確就是按中心擴充套件法分別遍歷奇數和偶數中心

最長公共子串解法

class

solution}}

}return s.

substr

(pos,len);}

};

中心擴充套件法解法

class

solution

}return s.

substr

(pos,len);}

intmaxstr

(string& s,

int i,

int j)

return j-i-1;

}};

而如果解決了回文串的奇偶性,那麼就不用分奇偶了,然而還是o(n^2),但馬拉車演算法可以通過優化達到(n),但也只有天才才能想出來了

LeetCode 第5題 最長回文子串

給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb 思路 動態規劃 時間複雜度為o n 2 boolean dp i j 01 class solutio...

LeetCode第409題最長回文串

題目 題目描述 給定乙個包含大寫字母和小寫字母的字串,找到通過這些字母構造成的最長的回文串。在構造過程中,請注意區分大小寫。比如 aa 不能當做乙個回文字串。注意 假設字串的長度不會超過 1010。示例 1 輸入 abccccdd 輸出 7 解釋 我們可以構造的最長的回文串是 dccaccd 它的長...

leecode刷題之第5題 最長回文子串

給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb 從中間向兩邊遍歷比暴力破解法更好,當兩邊的字母不相同時會終止此位置的遍歷,所以速度更快。class s...