Python
 Computer >> コンピューター >  >> プログラミング >> Python

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

  1. 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

  2. Pythonでターゲットを保持している最短のサイクル長を見つけるプログラム

    有向グラフの隣接リストがあるとします。ここで、インデックスiの各リストは、ノードiからの接続されたノードで表されます。目標値もあります。ターゲットを含む最短サイクルの長さを見つける必要があります。解決策がない場合は-1を返します。 したがって、入力が次のような場合 0があることに注意してください。ただし、これは最短ではありません。 これを解決するには、次の手順に従います- 訪問:=新しいセット l:=要素ターゲットのリスト。 長さ:=0 lが空ではない場合は、 長さ:=長さ+ 1 nl:=新しいリスト lの各uについて、 グラフ[u]の各vについて、 vがターゲット