一、问题描述
给定一个长度为N的字符串S和M个待插入字符,要求将这些字符全部插入到S中,使得最终形成的字符串字典序最小。
二、完整代码解析(含详细注释)
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main() {
int N, M;
string S, chars;
// 读取输入
cin >> N >> M;
cin >> S;
cin >> chars;
// 将待插入字符排序,方便贪心选择
sort(chars.begin(), chars.end());
string result;
int charIndex = 0;
// 贪心策略:在能保持字典序最小的位置插入当前最小字符
for (int i = 0; i < N; ++i) {
// 当还有字符可插入,且当前字符比待插入字符大时
while (charIndex < M && chars[charIndex] < S[i]) {
result.push_back(chars[charIndex]);
charIndex++;
}
result.push_back(S[i]);
}
// 插入剩余字符
while (charIndex < M) {
result.push_back(chars[charIndex]);
charIndex++;
}
cout << result << endl;
return 0;
}