トピック:
最長の回文配列を検索する文字列sを、与えられました。S 1000の最大長さをとることができます。
例1:
入力:
"bbbab"
出力:
4
可能な最長の回文配列は、「BBBB」です。
例2:
入力:
"cbbd"
出力:
2
可能な最長の回文配列は、「BB」です。
問題解決:
アイデア:
-
状態を
f[i][j]
表すs
の第i
二の文字j
の文字からなる部分文字列を、パリンドローム配列の最長の長さです。 -
伝達方程式
であればs
最初i
の文字とj
同じ言葉の文字f[i][j] = f[i + 1][j - 1] + 2
もし
s
最初のi
文字とj
異なる文字の単語f[i][j] = max(f[i + 1][j], f[i][j - 1])
その後、トラバーサル順序に注意し
i
、最後の文字前方トラバーサルの初めからj
からi + 1
あなたは、各サブ疑問が良いとされていることを確認することができますので、次のトラバース開始。 -
初期
f[i][i] = 1
最長の回文配列は、単一の文字です1
-
結果
f[0][n - 1]
クラスソリューション{ 公共 のint longestPalindromeSubseq(文字列S){ int型 N = s.length()。 INT [] [] F = 新しい INT [N] [N]。 以下のために(INT iがN = - 1; I> = 0; i-- ){ F [i]は[I] = 1 。 用(INT J = I + 1、J <nであり、j ++ ){ 場合(s.charAt(I)== s.charAt(J)){ F [I] [J] = F [I + 1] [j - 1] + 2 。 } 他{ F [I] [J] = Math.max(F [I + 1] [J]、F [i]は[J - 1 ])。 } } } 戻り F [0] [N - 1 ]。 } } 著者:a380922457 リンク:HTTPS:// leetcode-cn.com/problems/longest-palindromic-subsequence/solution/dong-tai-gui-hua-si-yao-su-by-a380922457-3/ 出典:滞在ボタン(LeetCode) 著作権は著者が保有しました。著者は認可商業転載してください接触、非商用の転載は、ソースを明記してください。