ここでのオリジナルタイトルリンク:https://leetcode.com/problems/satisfiability-of-equality-equations/
トピック:
アレイの所与の 式 の変数間の関係を表す文字列の各文字列は、 equations[i]
長さを有し、 4
そして2つの異なる形態のいずれかを取る: "a==b"
または "a!=b"
。ここでは、 a
と b
1文字の変数名を表す小文字(必ずしも異なっていない)です。
戻る true
すべて与えられた方程式を満たすように、変数名に整数値を割り当てることが可能である場合にのみ。
例1:
入力:[ "== bの"、 "B = A!"]
出力:偽の
説明:私たちは、言う= 1、B = 1を割り当てる場合は、最初の方程式が第二は満足ですが、ありません。両方の式を満たすように変数を割り当てる方法はありません。
例2:
入力:[ "B == A"、 "== Bの"]
出力:真の
説明:我々は両方の式を満足する= 1、B = 1を割り当てることができます。
例3:
入力:[ "== bの"、 "Bの==のC"、 "==のC"]
出力:真
例4:
入力:[ "== bの"、 "B = C!"、 "C == A"]
出力:偽
例5:
入力:[ "C == C"、 "B == D"、 "X = Z!"]
出力:真
注意:
1 <= equations.length <= 500
equations[i].length == 4
equations[i][0]
そして、equations[i][3]
小文字ですequations[i][1]
いずれかです'='
か'!'
equations[i][2]
あります'='
ソリューション:
まず、数式、すべて「==」との連合を通過します。
その後、!= Bが、AとBが同じ組合である場合、falseを返し、再び方程式を通過します。
時間計算:O(nlogk)。N = equations.length。kは数の異なる文字です。kは、単一の小文字であるため、このよう= 26 <K。
スペース:O(K)。
ACのJava:
1 クラスソリューション{ 2 のHashMap <文字、キャラクタ> 親。 3 4 公共 ブールequationsPossible(文字列[]式){ 5 であれば(式== NULL || equations.length == 0 ){ 6 リターン 真。 7 } 8 9 親= 新規 HashMapの<> (); 10 のために(文字列S:式){ 11 場合((1,3).equals( "=="をs.substring )){ 12 組合(s.charAt(0)、s.charAt(3)); 13 } 14 } 15 16 のために(文字列S:式){ 17 場合((1,3).equalsを(s.substring "!=")を&&見つける(s.charAt(0))==見つける(s.charAt (3 ))){ 18 リターン 偽。 19 } 20 } 21 22 リターン 真。 23 } 24 25 プライベート ボイド組合(チャー I、チャーJ){ 26 チャー pは= (I)を求めます。 27 チャー Q =(j)を見つけます。 28 であれば(!P = Q){ 29 parent.put(P、Q)。 30 } 31 } 32 33 プライベート チャー検索(チャーC){ 34 parent.putIfAbsent(C、C)。 35 であれば(!parent.get(C)= C){ 36 チャー祖先= (parent.get(C))を見つけます。 37 parent.put(C、祖先)。 38 } 39 40 リターンparent.get(C); 41 } 42 }