沒動態規劃出來,就做不出來……
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...