蓝桥杯15届国赛 最小字符串

打印 上一主题 下一主题

主题 2029|帖子 2029|积分 6087

题目描述

给定一个长度为 N 且只包含小写字母的字符串 S,和 M 个小写字母 c1,c2,...,cM​。现在你要把 M 个小写字母全部插入到字符串 S 中,每个小写字母都可以插入到任意位置。请问能得到的字典序最小的字符串是什么?
输入格式

第一行包含两个整数 N 和 M。第二行包含一个长度为 N 的字符串 S。第三行包含 M 个小写字母 c1,c2,...,cM。
输出格式

输出一个长度为 N+M 的字符串代表答案。
样例输入 1

  1. 4 3
  2. abbc
  3. cba
复制代码

样例输出 1

  1. aabbbcc
复制代码

样例输入 2

  1. 7 3
  2. lanqiao
  3. bei
复制代码

样例输出 2

  1. beilanqiao
复制代码

评测用例规模与约定

对于 20% 的评测用例,M=1。
对于 100%的评测用例,1≤N,M≤


比较简朴,双指针+sort
  1. #include<iostream>
  2. #include<algorithm>
  3. using namespace std;
  4. const int N = 1e5+10;
  5. int n, m;
  6. char c1[N], c2[N];
  7. int main()
  8. {
  9.         cin>>n>>m;
  10.         cin>>c1>>c2;
  11.        
  12.         sort(c2, c2+m);
  13.        
  14.         //比较 c1[i] 和 c2[j],输出较小的字符,并移动相应的指针
  15.         int i=0, j=0;
  16.         while(i<n && j<m)
  17.         {
  18.                 if(c1[i] <= c2[j])
  19.                 {
  20.                         cout<<c1[i];
  21.                         i++;
  22.                 }
  23.                 else
  24.                 {
  25.                         cout<<c2[j];
  26.                         j++;
  27.                 }
  28.         }
  29.        
  30.         //如果 c1 或 c2 有剩余未处理的字符,直接按顺序输出
  31.         while(i<n)
  32.         {
  33.                 cout<<c1[i];
  34.                 i++;
  35.         }
  36.         while(j<m)
  37.         {
  38.                 cout<<c2[j];
  39.                 j++;
  40.         }
  41.        
  42.         return 0;
  43. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

王柳

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表