zoukankan      html  css  js  c++  java
  • Carryon的字符串 自定义快排加map匹配

    题目

    题目描述

    Carryon最近喜欢上了一些奇奇怪怪的字符,字符都是英文小写字母,但奇怪的是a可能比b小,也可能比b大,好奇怪。与此同时,他拿到了好多的字符串,可是看着很不顺眼,因为他们很乱,所以他想将这些字符串按字典序从小到大排下序,这样就好看多了。由于a可能比b小,也可能比b大,这样按常规方法肯定是不行的,幸运的是他破解了26个字母的大小顺序,这样他就开开心心的将字符串从小到大排序了。

    输入

    第一行输入2626个字符的大小顺序

    第二行输入一个n(1n105)n(1≤n≤105)。

    接下来nn行,每行一个字符串sisi,数据保证每个字符串不重复。(1i=1nlen(si)3×105)(1≤∑i=1nlen(si)≤3×105)

    输出

    将n个字符串按字典序从小到大输出。

    样例输入

    abcdefghijklmnopqrstuvwxyz
    5
    bcda
    licj
    lin
    aaaa
    aaaaa
    

    样例输出

    aaaa
    aaaaa
    bcda
    licj
    lin

    解题思路:将新的顺序用map存下,然后用新的字符串存下原字符串根据新的排列顺序而得到的字符串,比如原字符串为‘abcd’,新的排列顺序为‘dbac’,那么得到的字符串为‘cbda’,然后把得到的字符串根据快排得到排列顺序,并根据此排列顺序将原字符串输出就行了;
    以下为ac代码:
     1 #include<iostream>
     2 #include<cstring>
     3 #include<map>
     4 #include<algorithm>
     5 using namespace std;
     6 struct str{
     7     string s,ss;
     8 };
     9 bool cmp(str s1,str s2)
    10 {
    11     return s1.ss<s2.ss;
    12 }
    13 int main()
    14 {
    15     map<char,char> mp;
    16     int n;
    17     char astr[90];
    18     str strs[100005];
    19     cin>>astr;
    20     for(int i=0;i<26;i++)
    21         mp[astr[i]]='a'+i;
    22     cin>>n;
    23     for(int i=0;i<n;i++)
    24     {
    25         cin>>strs[i].s;
    26         for(int j=0;j<strs[i].s.length();j++)
    27             strs[i].ss+=mp[strs[i].s[j]];
    28     }
    29     sort(strs,strs+n,cmp);
    30     for(int i=0;i<n;i++)
    31     cout<<strs[i].s<<endl;
    32     return 0;
    33 }
     
  • 相关阅读:
    UIAutomation识别UI元素
    pycharm调试bug Process finished with exit code 1073740791 (0xC0000409)
    adb常用命令
    win10 安装Pytorch GPU版+CUDA+cuDNN
    AD 端口相关
    sqlserver数据库排序规则
    sqlserver数据库备份的存储过程
    专有软件不是唯一!试试54款开源服务器软件[转]
    AD管理维护与排错工具
    LDAP over SSL (LDAPS) Certificate
  • 原文地址:https://www.cnblogs.com/wwq-19990526/p/9467510.html
Copyright © 2011-2022 走看看