交換字串中的元素20210111

2021-10-14 12:06:17 字數 1803 閱讀 8033

給你乙個字串 s,以及該字串中的一些「索引對」陣列 pairs,其中 pairs[i] = [a, b] 表示字串中的兩個索引(編號從 0 開始)。

你可以 任意多次交換 在 pairs 中任意一對索引處的字元。

返回在經過若干次交換後,s 可以變成的按字典序最小的字串。

示例 1:

輸入:s =

"dcab"

, pairs =[[

0,3]

,[1,

2]]輸出:"bacd"

解釋:

交換 s[

0] 和 s[3]

, s =

"bcad"

交換 s[

1] 和 s[2]

, s =

"bacd"

示例 2:

輸入:s =

"dcab"

, pairs =[[

0,3]

,[1,

2],[

0,2]

]輸出:"abcd"

解釋:交換 s[

0] 和 s[3]

, s =

"bcad"

交換 s[

0] 和 s[2]

, s =

"acbd"

交換 s[

1] 和 s[2]

, s =

"abcd"

示例 3:

輸入:s =

"cba"

, pairs =[[

0,1]

,[1,

2]]輸出:"abc"

解釋:交換 s[

0] 和 s[1]

, s =

"bca"

交換 s[

1] 和 s[2]

, s =

"bac"

交換 s[

0] 和 s[1]

, s =

"abc"

暫時參考這裡

public string smalleststringwithswaps

(string s, list

> pairs)

// 2.構建對映關係

char

chararray = s.

tochararray()

; map

> hashmap =

newhashmap

>

(len)

;for

(int i =

0; i < len; i++

)else

}// 3.重組字串

stringbuilder stringbuilder =

newstringbuilder()

;for

(int i =

0; i < len; i++

)return stringbuilder.

tostring()

;}// 並查集

private

class

unionfind

}public

void

union

(int x,

int y)

else

if(rank[rootx]

< rank[rooty]

)else

}public

intfind

(int x)

return parent[x];}

}

1202 交換字串中的元素

1202.交換字串中的元素 給你乙個字串s,以及該字串中的一些 索引對 陣列pairs,其中pairs i a,b 表示字串中的兩個索引 編號從 0 開始 你可以任意多次交換在pairs中任意一對索引處的字元。返回在經過若干次交換後,s可以變成的按字典序最小的字串。示例 1 輸入 s dcab pa...

1202 交換字串中的元素

給你乙個字串 s,以及該字串中的一些 索引對 陣列 pairs,其中 pairs i a,b 表示字串中的兩個索引 編號從 0 開始 你可以 任意多次交換 在 pairs 中任意一對索引處的字元。返回在經過若干次交換後,s 可以變成的按字典序最小的字串。class solution return f...

1202 交換字串中的元素 ( 並查集 )

leetcode 1202.交換字串中的元素 並查集,類似 leetcode 223 周賽第三題 將pair中關聯的字元連通新增進優先佇列中 幾個圈子各自排序,然後插入 思路 幾個下標的字母,如有交換關係,則可看作有傳遞關係,可歸併成乙個圈子,然後每個圈圈裡的字母按從小到大排序,這裡用到hashma...