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

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] =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
例(Python)

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

class Solution(object):
   def longestPalindrome(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 s[start:start+max_length]
ob1 = Solution()
print(ob1.longestPalindrome("ABBABBC"))

入力

"ABBABBC"

出力

"BBABB"

  1. Pythonで文字を繰り返さない最長の部分文字列

    文字列があるとします。文字を繰り返さずに最長の部分文字列を見つける必要があります。したがって、文字列が「ABCABCBB」のような場合、長さ3の繰り返しの部分文字列があるため、結果は3になります。これが「ABC」です。 これを解決するために、次の手順に従います set i:=0、j:=0、情報を保存するために1つのマップを設定します ans:=0 whilej<文字列の長さs map [s [j]]の場合、 ans:=max(ans、j – i + 1) map [s [j]]:=j それ以外の場合 i:=map [s [j]] + 1 ans:=max(ans、

  2. 最長の共通部分文字列に対するPythonのSequenceMatcher。

    2つの文字列が与えられた場合、私たちのタスクは最も長い共通のサブ文字列を出力することです。 SequenceMatcher.find_longest_match()メソッドを使用してPythonの問題を解決します。 クラスdifflib.SequenceMatcherは、シーケンス要素がハッシュ可能である限り、任意のタイプのシーケンスのペアを比較するための柔軟なクラスです。 find_longest_match(a、x、b、y) a [a:x]とb [b:y]で最も長く一致するブロックを見つけます。 例 Input: str1 = pythonprogramming,