Python 3最長回文サブストリングアルゴリズムの例

2163 ワード

この例では、Python 3の最長回文サブストリングアルゴリズムについて説明する.皆さんの参考にしてください.具体的には以下の通りです.
1.暴力法
考え方:各サブストリングに対して返信するかどうかを判断する

class Solution:
  def longestPalindrome(self, s):
    """
    :type s: str
    :rtype: str
    """
    if len(s) == 1:
      return s
    re = s[0]
    for i in range(0,len(s)-1):
      for j in range(i+1,len(s)):
        sta = i
        end = j
        flag = True
        while sta < end:
          if s[sta] != s[end]:
            flag = False
            break
          sta += 1
          end -= 1
        if flag and j-i+1 > len(re):
          re = s[i:j+1]
    return re


コミット結果:時間の制限を超えています
2.動的計画法
考え方:
m[i][j]タグi番目の文字からj番目の文字までで構成するサブストリングが返信するか否かは、返信値がTrueである、そうでない場合Falseである.
初期状態s[i][i]==True、残りの値はFalse.
s[i]==s[j]and m[i+1][j-1]==Trueの場合、m[i][j]=True

class Solution:
  def longestPalindrome(self, s):
    """
    :type s: str
    :rtype: str
    """
    k = len(s)
    matrix = [[False for i in range(k)] for j in range(k)] 
    re = s[0:1]
    for i in range(k):
      for j in range(k):
        if i==j:
          matrix[i][j] = True
    for t in range(1,len(s)):       #       2~len-1   (            )
      for i in range(k):
        j = i+t
        if j >= k: 
          break
        if i+1 <= j-1 and matrix[i+1][j-1]==True and s[i] == s[j]:
          matrix[i][j] = True
          if t+1 > len(re):
            re = s[i:j+1]
        elif i+1 == j and j-1 == i and s[i] == s[j]:
          matrix[i][j] = True
          if t+1 > len(re):
            re = s[i:j+1]
    return re


実行時間:8612 ms
Pythonに関する詳細について興味のある読者は、「Pythonデータ構造とアルゴリズムチュートリアル」、「Python暗号解読アルゴリズムとテクニックの総括」、「Python符号化操作テクニックの総括」、「Python関数使用テクニックの総括」、「Python文字列操作テクニックの総括」、「Python入門と進級経典チュートリアル」を参照してください.
ここではPythonプログラムの設計に役立つことを願っています.