有効な回文III

与えられた文字列がKパリンドロームであるかどうストリングsおよび整数kが与えられると、見つけます。

それから、ほとんどのk個の文字で除去することにより、パリンドロームに変換することができる場合は、文字列は、Kパリンドロームです。

例1:

入力:S = "abcdeca"、K = 2 
出力:真の
説明:削除'B'と'E'の文字。

制約:

  • 1 <= s.length <= 1000
  • Sは英語のみの文字を小文字ました。
  • 1 <= K <= s.length

これは、2つにI、Jを指し示すポインタの文字列を格納するための[] []でDP、DPの典型的な問題であり、それぞれ、平等と不等式に従って処理することができます。

最後に、長さがあれば - DP [0] [長さ - 1 <= K、そうでなければない示すことができます。

この問題と516最長回文サブシーケンス本質的に同じ。

1  クラスソリューション{
 2      公共 のint longestPalindromeSubseq(文字列S){
 3          int型の長さ= s.length()。
4          INT [] [] DP = 新しい INT [長さ]、[長さ]。
5          のためのINT iは= 0 ; I <長さ、I ++ ){
 6              DP [i]は[I] = 1 7          }
 8          INT subLength = 2 ; subLength <=長さ; subLength ++ ){
 9              INT I =0 ; I + subLength <=長さ; I ++ ){
 10                  、INT J = subLength + I - 1 11                  であれば(s.charAt(I)== s.charAt(J)){
 12                      DP [I] [J] = DP [I + 1 ] [j - 1 ] + 2 13                  } {
 14                      DP [I] [J] = Math.max(DP [I + 1 ] [j]は、DP [I]、[J - 1 ])。
15                  }
 16              }
 17          }
 18          リターン DP [ 0] [長さ- 1 ]。
19      }
 20 }

 

おすすめ

転載: www.cnblogs.com/beiyeqingteng/p/12275252.html