平等式のLeetCode 990充足

ここでのオリジナルタイトルリンク: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. 1 <= equations.length <= 500
  2. equations[i].length == 4
  3. equations[i][0] そして、  equations[i][3] 小文字です
  4. equations[i][1] いずれかです  '=' か '!'
  5. 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 }

 

おすすめ

転載: www.cnblogs.com/Dylan-Java-NYC/p/11230542.html