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
-
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
-
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]