Pythonでターゲットを保持している最短のサイクル長を見つけるプログラム
有向グラフの隣接リストがあるとします。ここで、インデックスiの各リストは、ノードiからの接続されたノードで表されます。目標値もあります。ターゲットを含む最短サイクルの長さを見つける必要があります。解決策がない場合は-1を返します。
したがって、入力が次のような場合
target =3.の場合、サイクルはノード1-> 2-> 3-> 1であるため、出力は3になります。別のサイクル0-> 1-> 2-> 3-> 0があることに注意してください。ただし、これは最短ではありません。
これを解決するには、次の手順に従います-
- 訪問:=新しいセット
- l:=要素ターゲットのリスト。
- 長さ:=0
- lが空ではない場合は、
- 長さ:=長さ+ 1
- nl:=新しいリスト
- lの各uについて、
- グラフ[u]の各vについて、
- vがターゲットと同じ場合、
- 戻りの長さ
- vにアクセスした場合、
- 次の反復に進む
- vを訪問済みとしてマーク
- nlの最後にvを挿入
- vがターゲットと同じ場合、
- グラフ[u]の各vについて、
- l:=nl
- 戻り値-1
理解を深めるために、次の実装を見てみましょう-
例
class Solution: def solve(self, graph, target): visited = set() l = [target] length = 0 while l: length += 1 nl = [] for u in l: for v in graph[u]: if v == target: return length if v in visited: continue visited.add(v) nl.append(v) l = nl return -1 ob = Solution() graph = [[1, 4],[2],[3],[0, 1],[]] target = 3 print(ob.solve(graph, target))
入力
[[1, 4],[2],[3],[0, 1],[]]
出力
3
-
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