每日一題——1202. 交換字串中的元素
阿新 • • 發佈:2021-01-11
1202. 交換字串中的元素
分類:圖、並查集
同一個連通分量內的字元可任意交換,故各分量內部排序再放回原本位置
class Solution { public: int root(int *u, int p){ if (p != u[p]) u[p] = root(u, u[p]); //路徑壓縮優化 return u[p]; } void connect(int *u, int i, int j){ u[root(u, j)] = root(u, i); } string smallestStringWithSwaps(string s, vector<vector<int>>& pairs) { int *u = new int[s.size()]; for(int i=0; i<s.size(); i++) u[i] = i; for(int i=0; i<pairs.size(); i++){ connect(u, pairs[i][0], pairs[i][1]); } priority_queue<char, vector<char>, greater<char> > qs[s.size()]; for(int i=0; i<s.size(); i++){ int indexOfSet = root(u, i); qs[indexOfSet].push(s[i]); } string res; for(int i=0; i<s.size(); i++){ int indexOfSet = root(u, i); res.push_back(qs[indexOfSet].top()); qs[indexOfSet].pop(); } delete[] u; return res; } };/* 12% **/
2021/01/11