• 写一个函数对字符串数组排序,使所有变位词都相邻


    题目

    写一个函数对字符串数组排序,使得所有的变位词都相邻。

    解答

    首先,要弄清楚什么是变位词。变位词就是组成的字母相同,但顺序不一样的单词。 比如说:live和evil就是一对变位词。OK,那么这道题目的意思就很清楚了, 它并不要求我们将字符串数组中的字符串按字典序排序,否则我们直接调用STL中的sort 函数就可以了。它要求我们在排序的过程中,按照变位词的准则来排序。 这种情况下,我们还是可以调用sort函数,不过要自己写一个对比函数。 一般情况下我们如果要排序一个长度为n的数组A,我们可以这样调用sort:

    sort(A, A+n);

    但如果我们有一个数组P,里面每个元素都是一个结构体:person,我们想按照person 这个结构体中年龄age来排序,这时候我们就需要自己写一个对比函数cmp:

    bool cmp(person p1, person p2){
        return p1.age < p2.age; 
    }

    然后这样调用sort函数:

    sort(P, P+n, cmp);

    OK,回到我们的题目,我们的对比函数需要将两个串先按字典序排序,然后再比较, 这样一来,变位词经过字典序排序后就是一样的了。当调用sort函数时将会被排在一起。

    代码如下:

    #include <iostream>
    #include <algorithm>
    using namespace std;
    
    bool cmp(string s1, string s2){
        sort(s1.begin(), s1.end());
        sort(s2.begin(),s2.end());
        return s1 < s2;
    }
    int main(){
        string s[] = {
            "axyz", "abc", "yzax", "bac", "zyxa", "fg", "gf"
        };
        sort(s, s+7, cmp);
        for(int i=0; i<7; ++i)
            cout<<s[i]<<endl;
        return 0;
    }
  • 相关阅读:
    Alink漫谈(五) : 迭代计算和Superstep
    Alink漫谈(四) : 模型的来龙去脉
    Elasticsearch索引模板-转载
    Filebeat配置文件解析-转载
    Logtash 配置文件解析-转载
    Logtash遇到的异常和注意点
    Linux中Sshd服务配置文件优化版本(/etc/ssh/sshd_config)
    运维应急方案撰写-草稿版分享
    du和df的统计结果为什么会不一样?
    全网最详细的Linux命令系列-Screen远程会话命令
  • 原文地址:https://www.cnblogs.com/wuchanming/p/4448971.html
Copyright © 2020-2023  润新知