zoukankan      html  css  js  c++  java
  • careercup-排序和查找 11.2

    11.2 编写一个方法,对字符串数组进行排序,将所有变位词1排在相邻的位置。

    类似leetcode:Anagrams

    解法:

    变位词:由变换某个词或短语的字母顺序构成的新的词或短语。例如,“triangle”是“integral”的变位词。

    此题有个要求,对数组中的字符串进行分组,将变位词排在一起。注意,除此之外,并没有要求这些词按特定顺序排列。

    做法之一就是套用一种标准排序算法,比如归并排序或快速排序,并修改比较器。这个比较器用来指示两个字符串互为变位词就是相等的。

    检查两个词是否为变位词,最简单的方法是什么呢?我们可以数一数每个字符串中各个字符出现的次数,两者相同则返回true。或者,直接对字符串进行排序,若两个字符串互为变位词,排序后就相同。

    C++实现代码:

    #include<vector>
    #include<unordered_map>
    #include<algorithm>
    #include<string>
    #include<iostream>
    using namespace std;
    
    vector<string> anagrams(vector<string> &strs)
    {
        vector<string> res;
        unordered_map<string,vector<string> > mp;
        string tmp;
        size_t i;
        for(i=0; i<strs.size(); i++)
        {
            tmp=strs[i];
            sort(tmp.begin(),tmp.end());
            mp[tmp].push_back(strs[i]);
        }
        auto mp_it=mp.begin();
        while(mp_it!=mp.end())
        {
            vector<string> vec=mp_it->second;
            if(vec.size()>1)
            {
                while(!vec.empty())
                {
                    res.push_back(vec[vec.size()-1]);
                    vec.pop_back();
                }
            }
            mp_it++;
        }
        return res;
    }
    
    int main()
    {
        vector<string> vec= {"race","acre","ecra","sort","orts","ac","ca"};
        vector<string> result=anagrams(vec);
        for(auto a:result)
            cout<<a<<endl;
    }
  • 相关阅读:
    止步于磁盘空间不足
    添加随机扰动 爬山算法
    递归 启发式
    删除文件
    linux 下载 图片
    CURD特性
    php 写session
    php 写session
    14.5.4 InnoDB File-Per-Table Tablespaces 每个表一个文件
    14.5.4 InnoDB File-Per-Table Tablespaces 每个表一个文件
  • 原文地址:https://www.cnblogs.com/wuchanming/p/4153091.html
Copyright © 2011-2022 走看看