leetcode 16.最長の回文配列のJava

トピック:

最長の回文配列を検索する文字列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)
著作権は著者が保有しました。著者は認可商業転載してください接触、非商用の転載は、ソースを明記してください。

 

おすすめ

転載: www.cnblogs.com/yanhowever/p/11900667.html