Pythonの特定の条件に従って、2つの文字列が同等であるかどうかを確認します
同じサイズの2つの文字列sとtがあるとします。 sとtが等しいかどうかを確認する必要があります。チェックする条件はいくつかあります:
- どちらも同じです。または、
- sを同じサイズの2つの連続する部分文字列に分割し、その部分文字列がs1とs2であり、同じようにtをt1とt2に分割する場合、次のいずれかが有効である必要があります。
- s1は再帰的にt1と同等であり、s2は再帰的にt2と同等です
- s1は再帰的にt2と同等であり、s2は再帰的にt1と同等です
したがって、入力がs ="ppqp" t ="pqpp"の場合、出力は、sとtを2つの部分に分割するかのようにTrueになります。s1="pp"、s2 ="qp"、t1 ="pq "、t2 =" pp "、ここではs1 =t2であり、s2とt1を2つの部分に分割するとs21 =" q "、s22 =" p "、t11 =" p "、t12 =" q "、ここでもs21 =t12とs22=t11なので、再帰的に同等です。
これを解決するには、次の手順に従います-
- 関数util()を定義します。これには時間がかかります
- sのサイズが奇数の場合、
- return s
- left:=util(sの左半分)
- right:=util(sの右半分)
- (左連結右)、(右連結左)の最小値を返します
- メインメソッドから、util(s)がutil(t)と同じ場合はtrueを返し、それ以外の場合はfalseを返します
理解を深めるために、次の実装を見てみましょう-
サンプルコード
def util(s): if len(s) & 1 != 0: return s left = util(s[0:int(len(s) / 2)]) right = util(s[int(len(s) / 2):len(s)]) return min(left + right, right + left) def solve(s,t): return util(s) == util(t) s = "ppqp" t = "pqpp" print(solve(s, t))
入力
"ppqp", "pqpp"
出力
True
-
与えられたツリーがPythonで対称ツリーであるかどうかをチェックするプログラム
二分木が1つあるとします。ツリーが対称ツリーであるかどうかを確認する必要があります。鏡像を撮ったときに同じである場合、木は対称であると言われます。これらの2つのツリーから、最初のツリーは対称ですが、2番目のツリーは対称ではありません。 これを解決するために、次の手順に従います。 次の手順を再帰的に呼び出します。関数はsolve(root、root)になります node1とnode2が空の場合、trueを返します node1またはnode2のいずれかが空の場合、falseを返します node1.val =node2.valおよびsolve(node1.lef
-
与えられたグラフがPythonで2部グラフであるかどうかをチェックするプログラム
無向グラフが1つあるとすると、グラフが2部グラフであるかどうかを確認する必要があります。グラフのすべてのエッジ{u、v}がAに1つのノードuを持ち、Bに別のノードvを持つように、グラフのノードを2つのセットAとBに分割できる場合、グラフは2部グラフであることがわかります。 したがって、入力が次のような場合 次に、出力はTrueになり、[0,4]はセットAにあり、[1,2,3]はセットBにあり、すべてのエッジはAからAまたはBからBではなく、AからBまたはBからAになります。 。 これを解決するために、次の手順に従います- 関数dfs()を定義します。これはソースを取ります