百度笔试—字符覆盖 【 题目描述】小度有一个小写字母组成的字符串 s.字符串 s 已经被写在墙上了. 小度还有很多卡片,每个卡片上有一个小写字母,组成一个字符串 t。小度可以选择字符串 t 中

3 、字符覆盖
【 题目描述】小度有一个小写字母组成的字符串 s.字符串 s 已经被写在墙上了.
小度还有很多卡片,每个卡片上有一个小写字母,组成一个字符串 t。小度可以选择字符串 t 中任意一个字
符,然后覆盖在字符串 s 的一个字符之上。小度想知道在选取一些卡片覆盖 s 的一些字符之后,可以得到的
字典序最大的字符串是什么。
输入描述: :
输入包括两行,第一行一个字符串 s,字符串 s 长度 length(1 ≤ length ≤ 50),s 中每个字符都是小写字

第二行一个字符串 t,字符串 t 长度 length(1 ≤ length ≤ 50),t 中每个字符都是小写字母
输出描述: :
输出一个字符串,即可以得到的字典序最大字符串
输入示例: :
fedcba
ee
输出示例: :
feeeba

思路:将字符串t存入vector中,并对其进行降序排序,然后两个指针分别指向s和t,如果当前s中的字符小于当前t中的字符,那么替换之,如果不是,那么s++,按这样的流程循环起来,一旦遇到字符串结束,则结束循环。代码如下:


void baidu_zifufugai(char* str1,char* str2)
{
    assert(str1);
    assert(str2);
    vector<char> str2v(50);
    while (*str2)
    {
        str2v.push_back(*str2);
        str2++;
    }
    sort(str2v.begin(), str2v.end(),greater<char>());//降序排序
    vector<char>::iterator it = str2v.begin();
    while (*str1 && *it)
    {
        if (*str1 < *it)
        {
            *str1 = *it;
            str1++, it++;
        }
        else if (*str1 >= *it)
            str1++;
    }
}

你可能感兴趣的:(笔试题)