Python 3最長回文サブストリングアルゴリズムの例
2163 ワード
この例では、Python 3の最長回文サブストリングアルゴリズムについて説明する.皆さんの参考にしてください.具体的には以下の通りです.
1.暴力法
考え方:各サブストリングに対して返信するかどうかを判断する
コミット結果:時間の制限を超えています
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
実行時間:8612 ms
Pythonに関する詳細について興味のある読者は、「Pythonデータ構造とアルゴリズムチュートリアル」、「Python暗号解読アルゴリズムとテクニックの総括」、「Python符号化操作テクニックの総括」、「Python関数使用テクニックの総括」、「Python文字列操作テクニックの総括」、「Python入門と進級経典チュートリアル」を参照してください.
ここではPythonプログラムの設計に役立つことを願っています.
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プログラムの設計に役立つことを願っています.