赞
踩
并查集
class Solution { vector<int> vec; public: string smallestStringWithSwaps(string s, vector<vector<int>>& pairs) { unordered_map<int,multiset<char>> mp; int n = s.size(); //初始化并查集 for(int i=0;i<n;i++) vec.emplace_back(i); //联通 for(auto it : pairs) vec[find(it[0])] = find(it[1]); //根据并查集存的下标将字母放入哈希表 for(int i=0;i<n;i++) mp[find(i)].insert(s[i]); //取出当前下标所在集合f for(int i=0;i<n;i++) { auto f = mp[vec[i]].begin(); //将集合中最前面(最小的)赋值当前位置 s[i] = *f; mp[vec[i]].erase(f); } return s; } int find(int x) { if(vec[x] != x) vec[x] = find(vec[x]); return vec[x]; } };
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。