Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで最長のパリンドロームサブシーケンスの長さを見つけるプログラム


小文字の文字列sがあるとします。 sで最も長いパリンドロームサブシーケンスの長さを見つける必要があります。

したがって、入力がs ="aolpeuvekyl"のような場合、回文は「レベル」であるため、出力は5になります。

これを解決するには、次の手順に従います-

  • n:=sのサイズ
  • 関数dp()を定義します。これにはi、jが必要です
  • iがjと同じ場合、
    • 1を返す
  • それ以外の場合、i> jの場合、
    • 0を返す
  • それ以外の場合、
    • s[i]がs[j]と同じ場合、
      • return 2 + dp(i + 1、j-1)
    • それ以外の場合、
      • dp(i + 1、j)およびdp(i、j-1)の最大値を返します
  • return dp(0、n-1)

例(Python)

理解を深めるために、次の実装を見てみましょう-

class Solution:
   def solve(self, s):
      n = len(s)
      def dp(i, j):
         if i == j:
            return 1
         elif i > j:
            return 0
         else:
            if s[i] == s[j]:
               return 2 + dp(i + 1, j - 1)
            else:
               return max(dp(i + 1, j), dp(i, j - 1))
      return dp(0, n - 1)
ob = Solution()
s = "aolpeuvekyl"
print(ob.solve(s))

入力

"aolpeuvekyl"

出力

5

  1. Pythonで最長のアナグラムサブシーケンスの長さを見つけるプログラム

    2つの小文字の文字列SとTがあるとすると、最長のアナグラムサブシーケンスの長さを見つける必要があります。 したがって、入力がS =helloworld、T =hellorldの場合、出力は8になります これを解決するには、次の手順に従います- c:=新しいマップ、d:=新しいマップ 0からaのサイズの範囲のiの場合、実行 cのa[i]の場合、 c [a [i]]:=c [a [i]] + 1 それ以外の場合 c [a [i]]:=1 0からbのサイズの範囲のiの場合、実行 dのb[i]の場合、 d [b [i]]:=

  2. Pythonで最も長いバランスの取れたサブシーケンスの長さを見つけるプログラム

    括弧「(」および「)」を含む文字列sがあるとすると、バランスの取れた括弧の最長のサブシーケンスの長さを見つける必要があります。 したがって、入力がs =())(()(の場合、出力は4になります。これは、 ()()のようなサブシーケンスを取ることができるためです。 これを解決するには、次の手順に従います- res:=0 n:=sのサイズ close:=0 n-1から0の範囲のiの場合、1ずつ減らします。 s[i]が)と同じ場合、 close:=close + 1 それ以外の場合 0の場合、 close:=close-1 r