1202 交換字串中的元素

2021-10-14 11:10:50 字數 1534 閱讀 2289

1202. 交換字串中的元素

給你乙個字串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"

思路:題目給出的索引對是允許我們任意多次交換的,我們可以發現,當兩個索引對之間存在重複元素,那麼這兩個索引所擁有的三個元素之間的順序可以任意調換,同理,互相連線的索引對所占用的元素之間的順序可以隨意調換;我們想要字典序最小,自然就要求這些可以調換的元素之間保持字典序最小;我們將可以調換的元素當作是乙個集合,自然會聯想到用並查集維護這種關係。

class solution 

return x;

}void union(int a,int b)else if(rank[a] > rank[b])else }}

string smalleststringwithswaps(string s, vector>& pairs)

for(i = 0; i < m; ++ i)

for(i = 0; i < n; ++ i)

index[father[i]].push_back(i);

strchar[father[i]].push_back(s[i]);

}unordered_set::iterator iter;

for(iter = hash_set.begin(); iter != hash_set.end(); ++ iter)

}return s;

}};

1202 交換字串中的元素

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

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

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

leetcode 1202 交換字串中的元素

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