Pythonで最長のフィボナッチサブシーケンスの長さを見つけるプログラム
X_1、X_2、...のような1つのシーケンスがあるとすると、-
の場合、X_nはフィボナッチのようになります。-
n> =3
-
X_i + X_i +1=すべてのi+2に対してX_i+2 <=n
ここで、シーケンスを形成する厳密に増加する配列Aを想定し、Aの最長のフィボナッチのようなサブシーケンスの長さを見つける必要があります。そのようなシーケンスがない場合は、0を返します。
したがって、入力がA =[1,2,3,4,5,6,7,8]のようである場合、次のシーケンス[1,2,3,5,8]があるため、出力は5になります。長さ5。
これを解決するには、次の手順に従います-
-
sA:=Aの要素からの新しいセット
-
last:=Aの最後の要素
-
B:=Aに存在する各元素とその頻度を含むマップ
-
最高:=0
-
Aのサイズが0までのiの場合、実行します
-
a:=A [i]
-
Aのサブ配列内の各bについて[インデックスi+1から終了まで]、実行
-
c:=a + b
-
cがsAに存在する場合、
-
B [a、b]:=1 + B [b、c]
-
ベスト:=ベストの最大値とB [a、b] +2
-
-
それ以外の場合、c>が最後の場合、
-
ループから出てきます
-
-
-
-
最高のリターン
例
理解を深めるために、次の実装を見てみましょう-
from collections import Counter def solve(A): sA = set(A) last = A[-1] B = Counter() best = 0 for i in reversed(range(len(A))): a = A[i] for b in A[i+1:]: c = a+b if c in sA: B[a,b] = 1 + B[b,c] best = max(best , B[a,b]+2) elif c>last: break return best A = [1,2,3,4,5,6,7,8] print(solve(A))
入力
[1,2,3,4,5,6,7,8]
出力
5
-
Pythonで最長のアナグラムサブシーケンスの長さを見つけるプログラム
2つの小文字の文字列SとTがあるとすると、最長のアナグラムサブシーケンスの長さを見つける必要があります。 したがって、入力がS =helloworld、T =hellorldの場合、出力は8になります これを解決するには、次の手順に従います- c:=新しいマップ、d:=新しいマップ 0からaのサイズの範囲のiの場合、実行 cのa[i]の場合、 c [a [i]]:=c [a [i]] + 1 それ以外の場合 c [a [i]]:=1 0からbのサイズの範囲のiの場合、実行 dのb[i]の場合、 d [b [i]]:=
-
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