与えられた文字列が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 }