Pythonで特定の文字列を含む最小の部分文字列を見つけるプログラム
2つの文字列sとtがあるとします。 sで最小の部分文字列を見つける必要があります。ここで、tは部分文字列の部分列でもあります。そのタイプの部分文字列が存在しない場合は空白の文字列を返し、最小の部分文字列が複数ある場合は左端の文字列を取得します。
したがって、入力がs ="abcbfbghfb"、t ="fg"の場合、出力はfbg
になります。これを解決するには、次の手順に従います-
-
N:=Sのサイズ
-
dp:=無限大で初期化されたサイズNの新しいリスト
-
0からN− 1の範囲のiの場合、実行
-
S[i]がT[0]と同じ場合、
-
dp [i]:=1
-
-
-
範囲1からT− 1のサイズのjの場合、実行
-
最後:=新しい地図
-
dp2:=無限大で初期化されたサイズNの新しいリスト
-
0からNの範囲のiの場合、実行
-
S[i]がT[j]と同じ場合、
-
prev_i:=最後からT [j −1]の値を返します
-
prev_iがnullでない場合、
-
dp2 [i]:=dp [prev_i] +(i − prev_i)
-
-
last [S [i]]:=i
-
-
dp:=dp2
-
-
-
m:=dpの最小値
-
i:=dpにmを含むインデックスを返す
-
mが無限大の場合、
-
空白の文字列を返す
-
-
S[インデックスi− dp [i]+1からi]
を返します。
理解を深めるために、次の実装を見てみましょう-
例
class Solution: def solve(self, S, T): INF = float("inf") N = len(S) dp = [INF] * N for i in range(N): if S[i] == T[0]: dp[i] = 1 for j in range(1, len(T)): last = {} dp2 = [INF] * N for i in range(N): if S[i] == T[j]: prev_i = last.get(T[j − 1], None) if prev_i is not None: dp2[i] = dp[prev_i] + (i − prev_i) last[S[i]] = i dp = dp2 m = min(dp) i = dp.index(m) if m == INF: return "" return S[i − dp[i] + 1 : i + 1] ob = Solution() print(ob.solve("abcbfbghfb","fg"))
入力
"abcbfbghfb","fg"
出力
fbg
-
グラフがPythonのすべての人によってトラバース可能かどうかを確認するプログラム
0からn-1までの番号が付けられたn個の頂点を含むグラフが与えられたとします。グラフは無向であり、各エッジには重みがあります。グラフには3種類の重みを設定でき、各重みは特定のタスクを示します。グラフをトラバースできるのは、ジャックとケーシーの2人です。エッジの重みが1の場合、ジャックはグラフをトラバースできます。重みが2の場合、ケーシーはグラフをトラバースできます。エッジの重みが3の場合、両方がグラフをトラバースできます。グラフを両方でトラバース可能にするために必要なエッジをすべて削除する必要があります。ジャックとケーシー。グラフをトラバース可能にするために削除するエッジの数を返します。トラバ
-
リスト内の最小数を見つけるPythonプログラム
この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −リストが表示されます。リストで利用可能な最小の番号を表示する必要があります ここでは、リストを並べ替えて最小の要素を取得するか、組み込みのmin()関数を使用して最小の要素を取得できます。 次に、以下の実装の概念を観察しましょう- 例 list1 = [101, 120, 104, 145, 99] # sorting using built-in function list1.sort() print("Smallest element is:", list1[0]) 出力 Smal