问题描述
给定一个长度为 N 且只包含小写字母的字符串 S,和 M 个小写字母 c1,c2,...,cM。现在你要把 M 个小写字母全部插入到字符串 S 中,每个小写字母都可以插入到任意位置。请问能得到的字典序最小的字符串是什么?
输入格式
第一行包含两个整数 N 和 M。第二行包含一个长度为 N 的字符串 S。第三行包含 M 个小写字母 c1,c2,...,cM。
输出格式
输出一个长度为 N+M 的字符串代表答案。
样例输入 1
4 3
abbc
cba
样例输出 1
aabbbcc
样例输入 2
7 3
lanqiao
bei
样例输出 2
beilanqiao
评测用例规模与约定
对于 20% 的评测用例,M=1。
对于 100%的评测用例,1≤N,M≤。
比较简单,双指针+sort
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 1e5+10;
int n, m;
char c1[N], c2[N];
int main()
{
cin>>n>>m;
cin>>c1>>c2;
sort(c2, c2+m);
//比较 c1[i] 和 c2[j],输出较小的字符,并移动相应的指针
int i=0, j=0;
while(i<n && j<m)
{
if(c1[i] <= c2[j])
{
cout<<c1[i];
i++;
}
else
{
cout<<c2[j];
j++;
}
}
//如果 c1 或 c2 有剩余未处理的字符,直接按顺序输出
while(i<n)
{
cout<<c1[i];
i++;
}
while(j<m)
{
cout<<c2[j];
j++;
}
return 0;
}