Pythonでほぼ同じ単語のペアがあるかどうかを確認するプログラム
各単語が同じ長さである単語と呼ばれる小文字の文字列のリストがあるとします。 1文字だけが異なる文字列が2つあるかどうかを確認する必要があります。
したがって、入力がwords =["seed"、 "pick"、 "lick"、 "root"、 "live"]の場合、"pick"と"lick"はほぼ同じであるため、出力はTrueになります。
これを解決するには、次の手順に従います-
- s:=新しいセット
- 単語内の各単語について、
- 単語内の各インデックスiと単語wについて、実行します
- 単語の部分文字列[インデックス0からi-1まで]連結"*"連結単語[インデックスi+1から終了まで]がsに存在する場合、
- Trueを返す
- それ以外の場合、
- insert(word [from index 0 to i-1] concatenate "*" concatenate word [from index i + 1 to end])をsに挿入します
- 単語の部分文字列[インデックス0からi-1まで]連結"*"連結単語[インデックスi+1から終了まで]がsに存在する場合、
- 単語内の各インデックスiと単語wについて、実行します
- Falseを返す
例
理解を深めるために、次の実装を見てみましょう-
def solve(words): s = set() for word in words: for i, w in enumerate(word): if word[:i] + "*" + word[i + 1 :] in s: return True else: s.add(word[:i] + "*" + word[i + 1 :]) return False words = ["seed", "pick", "lick", "root", "live"] print(solve(words))
入力
["seed", "pick", "lick", "root", "live"]
出力
True
-
グラフに共通の到達可能なノードがあるかどうかをPythonでチェックするプログラム
有向グラフのエッジリストがあり、ノードがn個あり、ノード名が0〜n-1であるとします。2つの整数値aとbもあります。 cからaに、またcからbに移動できるようなノードcがあるかどうかを確認する必要があります。 したがって、入力が次のような場合 また、a =2、b =3の場合、出力はTrueになります。これは、ここではc =0であるため、0から2、さらには0から3へのルートがあります。 これを解決するには、次の手順に従います- 関数DFS()を定義します。これは、グラフ、ノード、訪問済みを取得します ノードにアクセスしていない場合は、 ノードを訪問済みとしてマーク グラフ[ノード]
-
Pythonで葉のシーケンスが2つの葉と同じであるかどうかを確認するプログラム
2つの二分木があるとします。両方の木の左から右への葉の順序が同じであるかどうかを確認する必要があります。 したがって、入力が次のような場合 両方のツリーのシーケンスが[2、6]であるため、出力はTrueになります。 これを解決するには、次の手順に従います。 c:=新しいリスト 関数inorder()を定義します。これが定着し、c cがnullの場合、 c:=新しいリスト rootがnullでない場合、 順序(ルートの左側、c) ルートの左側がnullで、ルートの右側がnullの場合、 cの最後にrootの値を挿入 順序(ルートの権利、c) return c