ここでのオリジナルタイトルリンク:https://leetcode.com/problems/lexicographically-smallest-equivalent-string/
トピック:
文字列を考える A
と、 B
同じ長さで、我々は[i]とB [i]は同等の文字であると言います。例えば、場合 A = "abc"
と B = "cde"
、我々は持っています 'a' == 'c', 'b' == 'd', 'c' == 'e'
。
等価文字は任意の等価関係の通常の規則に従います。
- 再帰性:「」==「」
- 対称性: '' == 'B' が 'B' を意味== ''
- 推移性: '' == 'B' と 'B' == 'c' は '' == 'C' を意味します
例えば、同値から情報を与えられた A
と B
上記、 S = "eed"
、 "acd"
、及び "aab"
等価文字列であり、 "aab"
の辞書式に最小の等価文字列です S
。
辞書順最小の同等の文字列を返します S
から同等の情報を使用して A
と B
。
例1:
入力:A = 「パーカー」、B = 「モリス」、S = 「パーサ」
出力:「makkek」 で同等の情報に基づいて:説明A
とB
、私たちすることができますグループとしての文字[m,p]
、[a,o]
、[k,r,s]
、[e,i]
。各グループの文字が同等と辞書順にソートされています。だから、答えはあります"makkek"
。
例2:
入力:A = 「こんにちは」、B = 「世界」、S = 「保留」
出力:「HDLD」 説明:で同等の情報に基づいてをA
してB
、我々はできるグループ自分のキャラクターをとして[h,w]
、[d,e,o]
、[l,r]
。だから、唯一の第二の手紙'o'
でS
に変更され'd'
、答えがあります"hdld"
。
例3:
入力:A = 「leetcode」、B = 「プログラム」、S = 「ソースコード」
出力:「aauaaaaada」 説明:私たちは、グループ内の同等の文字A
とB
など[a,o,e,r,s,c]
、[l,p]
、[g,t]
そして[d,m]
、したがって、すべての文字S
を除く'u'
と'd'
に変換され'a'
、答えです"aauaaaaada"
。
注意:
- 文字列
A
、B
およびS
からのみ小文字の英文字で構成されて'a'
-'z'
。 - 文字列の長さ
A
、B
とS
の間である1
と1000
。 - 文字列
A
とB
同じ長さのものです。
ソリューション:
A及びBは、それぞれのインデックスに対して、Aに対応する文字等しく、Bは同組合でなければなりません。
ランクによって労働組合、労働組合を行うと。<Cは、Cの親です。
その後、Sの各文字のために、その祖先を見つけて、その結果に追加します。
時間複雑:O((M + n)が関数logm)。M = A.length()、N = S.length()。検索はO(関数logm)をとります。
ランク別パス圧縮や労働組合、とamatorize O(1)。
スペース:O(M)。
ACのJava:
1 クラスソリューション{ 2 地図<文字、キャラクタ>親= 新規 HashMapの<> (); 3 4 公共ストリングsmallestEquivalentString(列A、列B、列S){ 5 ため(int型 ;)iはA.lengthを(<; I = 0 iは++ ){ 6 チャー A = A.charAt(I)。 7 チャー B = B.charAt(I)。 8 9 もし(見つける(A)=!(B)を見つける){ 10 組合を(B) 11 } 12 } 13 14 StringBuilderのSB = 新しいStringBuilderの(); 15 のためには、(int型 i = 0; iはS.length()<; I ++のを){ 16 チャー ANC = 検索(S.charAt(I))。 17 sb.append(ANC)。 18 } 19 20 戻りsb.toString()。 21 } 22 23 プライベート チャー検索(チャーC){ 24 parent.putIfAbsent(C、C)。 25 であれば(C =!{parent.get(C)) 26 チャー ANC = 検索(parent.get(c)参照)。 27 parent.put(C、ANC)。 28 } 29 30 リターンparent.get(C); 31 } 32 33 プライベート ボイド組合(char型、チャーB){ 34 チャー C1 = 見つける(A) 35 チャー C2 = 見つける(B) 36 であれば(C1 < C2){ 37 parent.put(C2、C1)。 38 } 他{ 39 parent.put(C1、C2)。 40 } 41 } 42 }