题目描述
小度有一个小写字母组成的字符串s.字符串s已经被写在墙上了.
小度还有很多卡片,每个卡片上有一个小写字母,组成一个字符串t。小度可以选择字符串t中任意一个字符,然后覆盖在字符串s的一个字符之上。小度想知道在选取一些卡片覆盖s的一些字符之后,可以得到的字典序最大的字符串是什么。
输入描述:
输入包括两行,第一行一个字符串s,字符串s长度length(1 ≤ length ≤ 50),s中每个字符都是小写字母 第二行一个字符串t,字符串t长度length(1 ≤ length ≤ 50),t中每个字符都是小写字母
输出描述:
输出一个字符串,即可以得到的字典序最大字符串
示例1
输入
fedcba ee
输出
feeeba
思路: 用贪心的思想,将第二个字符串从大到小排序, 双指针遍历第一个字符串,如果当前能使字典序增大,替换。
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int main()
{
string str1,str2;
cin>>str1>>str2;
sort(str2.begin(),str2.end(),greater<char>());
for(int i=0,j=0;i<str1.size();i++){
if(j<str2.size() && str1[i]<str2[j])
str1[i]=str2[j++];
}
cout<<str1<<endl;
}