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

Pythonで最長のパリンドローム部分文字列の長さを見つけるプログラム


文字列Sがあるとします。Sで最長の回文部分文字列の長さを見つける必要があります。文字列Sの長さは1000であると想定しています。したがって、文字列が「BABAC」の場合、最長の回文部分文字列は「BAB」です。長さは3です。

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

  • 文字列の長さと同じ次数の正方行列を1つ定義し、Falseで埋めます

  • 主対角要素をtrueに設定し、DP [i、i] =0からorder–1までのすべてのiに対してTrue

  • start:=0

  • 範囲2からS+1の長さのlの場合

    • 0からSの長さまでの範囲のiの場合– l + 1

      • 終了:=i + l

      • l =2の場合、

        • S [i] =S [end-1]の場合、

          • DP [i、end --1] =True、max_len:=l、およびstart:=i

      • それ以外の場合

        • S [i] =S[end-1]およびDP[i+ 1、end-2]の場合、

          • DP [i、end --1] =True、max_len:=l、およびstart:=i

  • max_lenを返す

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

class Solution(object):
   def solve(self, s):
      dp = [[False for i in range(len(s))] for i in range(len(s))]
         for i in range(len(s)):
            dp[i][i] = True
         max_length = 1
         start = 0
         for l in range(2,len(s)+1):
            for i in range(len(s)-l+1):

               end = i+l

               if l==2:
                  if s[i] == s[end-1]:
                     dp[i][end-1]=True
                     max_length = l
                     start = i
               else:
                  if s[i] == s[end-1] and dp[i+1][end-2]:
                     dp[i][end-1]=True
                  max_length = l
                  start = i
return max_length

ob = Solution()
print(ob.solve('BABAC'))

入力

"ABBABBC"

出力

5

  1. 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

  2. Pythonで最長の回文部分文字列

    文字列Sがあるとします。Sで最も長い回文部分文字列を見つける必要があります。文字列Sの長さは1000であると想定しています。したがって、文字列が「BABAC」の場合、その場合、最長の回文部分文字列は「BAB」です。 これを解決するために、次の手順に従います 文字列の長さと同じ次数の正方行列を1つ定義し、Falseで埋めます 主対角要素をtrueに設定して、0からorder –1までのすべてのiに対してDP[i、i] =True start:=0 範囲2からS+1の長さのlの場合 0からSの長さの範囲のiの場合– l + 1 end:=i + l l =2の場合、 S [i]