最長回文子列(Python 3)
問題の説明:文字列sが与えられ、sの中で最も長い回文サブ列が見つかります.sの最大長さは1000と仮定できます.例:入力:「babad」出力:「bab」注意:「aba」も有効な答えです.
解決の考え方:文字列の最初の文字から最後の文字まで遍歴し、その文字から最初の文字までのサブストリングが回文であるかどうかを判断し、変数を設定して最も長い回文サブストリングの長さを更新する.
コードは以下の通りです^-^:
時間と空間の複雑さ:ソース:力ボタン(LeetCode)リンク:https://leetcode-cn.com/probl...
解決の考え方:文字列の最初の文字から最後の文字まで遍歴し、その文字から最初の文字までのサブストリングが回文であるかどうかを判断し、変数を設定して最も長い回文サブストリングの長さを更新する.
コードは以下の通りです^-^:
class Solution:
def longestPalindrome(self, s: str) -> str:
if s == None:
return None
length = len(s)
if length <= 1:
return s
dp = [[0 for i in range(length)] for i in range(length)]
ss = s[0]
re = 1
for i in range(0,length):
for j in range(0,i+1):
if i-j<=1:
if s[j]==s[i]:
dp[j][i]=1
if re < i-j+1:
ss = s[j:i+1]
re = i-j+1
else:
if s[j]==s[i] and dp[j+1][i-1]:
dp[j][i]=1
if re < i-j+1:
ss = s[j:i+1]
re = i-j+1
return ss
時間と空間の複雑さ:ソース:力ボタン(LeetCode)リンク:https://leetcode-cn.com/probl...