Pythonで最短のスーパーシーケンスの長さを見つけるプログラム
2つの文字列sとtがあるとします。サブシーケンスとしてsとtの両方を持つ最短の文字列の長さを見つける必要があります。
したがって、入力がs ="pipe" t ="people"のような場合、可能なスーパーシーケンスの1つは "pieople"であるため、出力は7になります。
これを解決するには、次の手順に従います-
-
m:=sのサイズ、n:=tのサイズ
-
table:=サイズ(n + 1)x(m + 1)のテーブルで、0を入力します
-
0からmの範囲のiの場合、実行
-
0からnの範囲のjについては、次のようにします
-
iが0と同じか、jが0と同じ場合、
-
table [i、j]:=0
-
-
それ以外の場合
-
s[i-1]がt[j-1]と同じ場合、
-
table [i、j]:=1 + table [i-1、j-1]
-
-
それ以外の場合
-
table [i、j] =table [i、j-1]とtable [i-1、j]
の最大値
-
-
-
-
-
m +nを返す-table[m、n]
例
理解を深めるために、次の実装を見てみましょう-
class Solution: def solve(self, s, t): m = len(s) n = len(t) table = [[0 for i in range(n + 1)] for j in range(m + 1)] for i in range(m + 1): for j in range(n + 1): if i == 0 or j == 0: table[i][j] = 0 else: if s[i - 1] == t[j - 1]: table[i][j] = 1 + table[i - 1][j - 1] else: table[i][j] = max(table[i][j - 1], table[i - 1][j]) return m + n - table[m][n] ob = Solution() s = "pipe" t = "people" print(ob.solve(s, t))
入力
"pipe", "people"
出力
7
-
Pythonでポリゴンの領域を見つけるプログラム
順序付けられたポイントのリストが2D平面上の単純なポリゴンエンドポイントを表すとします。このポリゴンの領域を見つける必要があります。 したがって、入力がpoints =[(0、0)、(0,5)、(3、5)、(3,0)]のような場合、出力は15になります。 これを解決するには、次の手順に従います- 関数getInfo()を定義します。これにはx1、y1、x2、y2が必要です return x1 * y2-y1 * x2 メインの方法から、次の手順を実行します N:=ポイントのサイズ (firstx、firsty):=points [0] (prevx、prevy):=(fir
-
Pythonでターゲットを保持している最短のサイクル長を見つけるプログラム
有向グラフの隣接リストがあるとします。ここで、インデックスiの各リストは、ノードiからの接続されたノードで表されます。目標値もあります。ターゲットを含む最短サイクルの長さを見つける必要があります。解決策がない場合は-1を返します。 したがって、入力が次のような場合 0があることに注意してください。ただし、これは最短ではありません。 これを解決するには、次の手順に従います- 訪問:=新しいセット l:=要素ターゲットのリスト。 長さ:=0 lが空ではない場合は、 長さ:=長さ+ 1 nl:=新しいリスト lの各uについて、 グラフ[u]の各vについて、 vがターゲット