美文网首页
1722. 执行交换操作后的最小汉明距离

1722. 执行交换操作后的最小汉明距离

作者: 来到了没有知识的荒原 | 来源:发表于2021-01-11 11:28 被阅读0次

1722. 执行交换操作后的最小汉明距离

并查集

class Solution {
public:
    vector<int>p;
    int find(int x){
        if(p[x]!=x)p[x]=find(p[x]);
        return p[x];
    }

    void merge(int a,int b){
        int ra=find(a),rb=find(b);
        p[ra]=rb;
    }
    int minimumHammingDistance(vector<int>& s, vector<int>& t, vector<vector<int>>& as) {
        int n=s.size();
        p=vector<int>(n);
        for(int i=0;i<n;i++)p[i]=i;

        for(auto v:as){
            int x=v[0],y=v[1];
            merge(x,y);
        }

        map<int,vector<int>>mp;
        for(int i=0;i<n;i++){
            int ra=find(p[i]);
            mp[ra].push_back(i);
        }

        int res=0;

        for(auto i:mp){
            vector<int>v=i.second;
            int l=v.size();
            vector<int>aa(l),bb(l);
            map<int,int>m1,m2;
            for(int i=0;i<l;i++){
                m1[s[v[i]]]++;
                m2[t[v[i]]]++;
            }

            for(auto j:m1){
                res+=min(j.second,m2[j.first]);
            }
        }
        return n-res;
    }
};

跟这个题差不多 1202. 交换字符串中的元素

class Solution {
public:
    vector<int>p;
    int find(int x){
        if(p[x]!=x)p[x]=find(p[x]);
        return p[x];
    }
    void merge(int a,int b){
        int ra=find(a),rb=find(b);
        p[ra]=rb;
    }
    string smallestStringWithSwaps(string s, vector<vector<int>>& pairs) {
        int n=s.size();
        p.resize(n);
        for(int i=0;i<n;i++)p[i]=i;

        for(auto v:pairs){
            merge(v[0],v[1]);
        }

        map<int,vector<char>>mp;

        for(int i=0;i<n;i++){
            int t=find(i);
            mp[t].push_back(s[i]);
        }

        for(auto &pp:mp){
            auto &v=pp.second;
            sort(v.rbegin(),v.rend());
        }

        for(int i=0;i<n;i++){
            int t=find(i);
            char pos=mp[t].back();
            s[i]=pos;
            mp[t].pop_back();
        }

        return s;
    }
};

相关文章

  • 1722. 执行交换操作后的最小汉明距离

    1722. 执行交换操作后的最小汉明距离[https://leetcode-cn.com/problems/min...

  • 汉明距离、超立方体、异或的一些知识

    汉明距离和汉明重量 汉明距离是以理查德·卫斯里·汉明的名字命名的。在信息论中,两个等长字符串之间的汉明距离是两个字...

  • LeetCode 461.汉明距离

    ?博客原文 :《LeetCode 461.汉明距离 - JavaScript》 汉明距离定义:两个整数之间的汉明距...

  • 汉明距离

  • 汉明距离

    两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。 给出两个整数 x 和 y,计算它们之间的汉明...

  • 汉明距离

    指的是两个(相同长度)字符串,你变成我,我变成你,需要换掉多少个字符的总和,即Max(Sum1,Sum2),比如...

  • 汉明距离

    题目来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/hamm...

  • 汉明距离

    https://zhuanlan.zhihu.com/p/94081111pHash简单来说,是通过感知哈希算法对...

  • 汉明距离

    题目: 题目的理解: 将整数转化为二进制,然后再转化为字符串,进行字符串比较,得到不同的位数。 python实现 ...

  • 汉明距离

    两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。 给出两个整数 x 和 y,计算它们之间的汉明...

网友评论

      本文标题:1722. 执行交换操作后的最小汉明距离

      本文链接:https://www.haomeiwen.com/subject/uszraktx.html