首页 > 试题广场 >

字符覆盖

[编程题]字符覆盖
  • 热度指数:3503 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
小度有一个小写字母组成的字符串s.字符串s已经被写在墙上了.
小度还有很多卡片,每个卡片上有一个小写字母,组成一个字符串t。小度可以选择字符串t中任意一个字符,然后覆盖在字符串s的一个字符之上。小度想知道在选取一些卡片覆盖s的一些字符之后,可以得到的字典序最大的字符串是什么。

输入描述:
输入包括两行,第一行一个字符串s,字符串s长度length(1 ≤ length ≤ 50),s中每个字符都是小写字母
第二行一个字符串t,字符串t长度length(1 ≤ length ≤ 50),t中每个字符都是小写字母


输出描述:
输出一个字符串,即可以得到的字典序最大字符串
示例1

输入

fedcba
ee

输出

feeeba
var s1 = readline();
var s2 = readline();
var newS1 = s1.split('');
var newS2 = s2.split('');
newS2 = newS2.sort().reverse();
for(var i = 0,j=0;i<newS1.length&&j<newS2.length;i++){
    if(newS1[i]<newS2[j]){
        newS1.splice(i,1,newS2[j]);
        j++;
    }
}
print(newS1.join(''));

发表于 2019-09-01 21:28:47 回复(0)
#include <iostream>
using namespace std;
#include <string>
#include <algorithm>

int main()
{
    string s,t;
    cin >> s >> t;
    sort(t.begin(), t.end(), greater<char>());
    int pos = 0;
    for (int i=0; i<s.size(); i++)
    {
        //string的底层最后一个字符是'\0'
        if (s[i] < t[pos])
        {
            s[i] = t[pos++];
        }
    }
    cout << s << endl;
}

编辑于 2018-08-22 11:18:09 回复(1)
对卡片按照字典序进行升序排列,从前往后遍历字符串s,如果当前字符s[cur]比最后一张卡片的ascii码小,就用这张卡片替换掉字符s[cur],以保证s在替换操作之后字典序尽可能大。
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.Arrays;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        char[] s = br.readLine().trim().toCharArray();
        char[] t = br.readLine().trim().toCharArray();
        Arrays.sort(t);
        int i = 0, j = t.length - 1;
        for(i = 0; i < s.length; i++){
            if(j >= 0 && s[i] < t[j]){
                s[i] = t[j];
                if(j >= 0) j --;
            }
        }
        System.out.println(new String(s));
    }
}


编辑于 2021-02-24 23:08:00 回复(0)
#include <bits/stdc++.h>
using namespace std;
int main()
{
    string s,t,res="";
    cin>>s>>t;
    sort(t.begin(),t.end());
    int t1=t.size()-1;
    for(int i=0;i<s.size()&&t1>=0;i++)
        if(s[i]<t[t1])
            s[i]=t[t1--];
    cout<<s<<endl;
    return 0;
}

发表于 2019-06-20 14:59:40 回复(0)
#include <bits/stdc++.h>

using namespace std;

void Sort(string &s){     int n = s.length();     for(int i=0;i<n-1;i++){         for(int j=0;j<n-i-1;j++)             if(s[j]<s[j+1])                 swap(s[j],s[j+1]);     }
}

int main()
{     string s,t;     while(cin>>s>>t){         int m=s.length(),n=t.length();         Sort(t);         for(int i=0,k=0;i<m;i++){             if(s[i]<t[k]){                 s[i] = t[k];                 k++;             }             if(k==n)                 break;         }         cout<<s<<endl;             }     return 0;
}

发表于 2019-02-09 01:34:11 回复(0)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

/**
 * @author wylu
 */
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        char[] s = br.readLine().toCharArray();
        char[] t = br.readLine().toCharArray();

        Arrays.sort(t);
        for (int i = t.length - 1, j = 0; i >= 0 && j < s.length; i--) {
            while (j < s.length && s[j] >= t[i]) j++;
            if (j < s.length) s[j++] = t[i];
        }
        System.out.println(new String(s));
    }
}

发表于 2019-01-17 23:38:02 回复(0)
"""
@author:liang
"""
def solution(s,t):
    t=sorted(t)[::-1]
    s=list(s)
    for i in range(len(s)):
        if t==[]:
            break
        if t[0]>s[i]:
            s[i]=t[0]
            t.pop(0)
        else:
            continue
    return "".join(s)
s=raw_input().strip()
t=raw_input().strip()
print solution(s,t)

发表于 2018-07-18 20:09:03 回复(0)
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine(),t = sc.nextLine();
        char[] cs = s.toCharArray();
        char[] ts = t.toCharArray();
        Arrays.sort(ts);
        int n = s.length(), tn = t.length();
        for (int i=0, j=tn-1; i<n && j>=0; i++) {
            if (cs[i] < ts[j]) {
                cs[i] = ts[j];
                j--;
            }
        }
        System.out.println(new String(cs));
    }
}
发表于 2019-04-01 16:47:52 回复(1)
s = input()
chg = input()
stemp = s

chg = sorted(chg)[::-1]

count = 0
newstr = ""

for i in s:
    if count == len(chg):
        newstr += i
    else:
        if ord(i) >= ord(chg[count]):
            newstr += i
        elif ord(i) < ord(chg[count]):
            newstr += chg[count]
            count += 1

print(newstr)


发表于 2023-04-15 14:28:56 回复(0)
package main

import (
    "fmt"
    "strings"
    "sort"
)

func main() {
    var s,t string
    fmt.Scan(&s,&t)
    ss:=strings.Split(s,"")
    tt:=strings.Split(t,"")
    sort.Slice(tt,func(i,j int)bool{
        return tt[i]>tt[j]
    })
    idx:=0
    for i:=0;i<len(ss);i++{
        if idx<len(tt)&&ss[i]<tt[idx]{
            ss[i]=tt[idx]
            idx++
        } 
    }
    fmt.Print(strings.Join(ss,""))
}

发表于 2023-03-18 20:37:47 回复(0)
#include<bits/stdc++.h>
using namespace std;
int main()
{
    string s,t;
    cin>>s>>t;
    sort(t.begin(), t.end());
    for(int i=0;i<s.length();i++)
        if(s[i]<t.back())    {s[i]=t.back();t.pop_back();}
    cout<<s;
}


发表于 2022-02-07 23:13:06 回复(0)
import java.util.*;
public class Main{
    public static void main(String[] args)
    {
        Scanner sc= new Scanner(System.in);
        String s = sc.nextLine();
        char[] t = sc.nextLine().toCharArray();
        Arrays.sort(t);
        int i ,j = t.length-1; //双指针 一头一尾比较
        StringBuilder sb =new StringBuilder();
        for(i = 0;i<s.length();i++)
        {
            char c = s.charAt(i);
            if(j >=0&&c<t[j]) 
            {
                sb.append(t[j]);
                j--;
            }
            else
                sb.append(c);
        }
        System.out.println(sb.toString());
    }
}

发表于 2021-09-09 05:03:52 回复(0)
import java.util.*;
public class Main{
    public static void main(String args[]){
		Scanner in = new Scanner(System.in);
        while(in.hasNextLine()){
            StringBuffer s = new StringBuffer(in.nextLine());  // 替换字母直接在s上操作
            char c[] = in.nextLine().toCharArray();            // 存储字符卡片
            Arrays.sort(c);                                    // 对卡片大小排序
            for(int i=c.length-1;i>=0;i--) {    // 从最大的卡片进行遍历
            	for(int j=0;j<s.length();j++) { // 从字符串的第一个字母开始比较,才有可能替换到最大的结果
            		if(c[i] > s.charAt(j)) {    // 字符卡片比字符串上的某一字符大
            			s.setCharAt(j, c[i]);   // 直接替换
            			break;                  // 并且这个卡片不能再使用
            		}
            	}
            }
            System.out.println(s);
        }
    }
}

发表于 2021-09-01 01:18:48 回复(0)
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
	string s1, s2;
	while (cin >> s1 >> s2)
	{
		sort(s2.begin(), s2.end());
		reverse(s2.begin(), s2.end());
		for (int i = 0; i < s2.size(); i++)
		{
			for (int j = 0; j < s1.size(); j++)
			{
				if (s2[i] > s1[j])
				{
					s1[j] = s2[i];
					break;
				}
			}
		}
		cout << s1 << endl;
	}
	return 0;
}

发表于 2020-11-21 15:25:00 回复(0)
#include <bits/stdc++.h>

using namespace std;

int main()
{
	string s, s1;
	cin >> s;
	cin >> s1;
	sort(s1.rbegin(), s1.rend());
	int index = 0;
	for (int i = 0; i < s.size(); i++)
	{
		int j = 0;
		while (j < s1.size())
		{
			if (s[i] < s1[j])
			{
				s[i] = s1[j];
				s1[j++] = 'a';
				index++;
				break;
			}
			else j++;
		}
		if (index == s1.size())break;
	}
	cout << s;
}

发表于 2020-04-13 14:59:23 回复(0)
import sys
def main():
	lines = sys.stdin.readlines()
	lines = [line.strip() for line in lines if line.strip()]
	originList = list(lines[0])
	haveStr = lines[-1]
	haveStr = sorted(haveStr,reverse=True)
	index = 0
	for num in haveStr:
		for i in range(index,len(originList)):
			if originList[i]>=num:
				continue
			else:
				index = i
				originList[i] = num
				break
	print(''.join(originList))
if __name__ == '__main__':
	main()

发表于 2020-03-28 17:24:03 回复(0)
def solution(s,t):
    t=sorted(t)[::-1]
    s=list(s)
    i = 0
    while i < len(s):
        if t==[]:
            break
        if t[0]>s[i]:
            s[i]=t[0]
            t.pop(0)
        i += 1
    return "".join(s)
s=input()
t=input()
print(solution(s,t))
发表于 2020-03-24 00:15:05 回复(0)
var str=readline().split('');
var arr=readline().split('');
for(var i=0;i<arr.length-1;i++){
    for(var j=i+1;j<arr.length;j++){
        if(arr[i]<arr[j]){
            var tem=arr[i];
            arr[i]=arr[j];
            arr[j]=tem
        }
    }
}
var len=arr.length;
var p=0;
// k表示第二字符串的索引
for(var k=0;k<len;k++){  //0 1
    for(var m=k;m<str.length;m++){
        // 更换
        if(arr[k]>str[m]){
            str[m]=arr[k];
            break;
        }
    }
}
console.log(str.join(''))

发表于 2020-03-18 19:37:16 回复(0)
canner in = new Scanner(System.in);
               String a=in.nextLine();
               String b=in.nextLine();
               char[] aa=a.toCharArray();
               char[] bb=b.toCharArray();
               int aaa=aa.length;
               int bbb=bb.length;
               for(int i=0,j=0;i<aaa&&j<bbb;i++) {
                   
                   if(aa[i]<bb[j]) {
                       aa[i]=bb[j];
                       
                       j++;
                       
                   }
                   
                   
                   
                   
               }
           String c=new String(aa);
           System.out.println(c);
发表于 2020-03-07 11:37:13 回复(0)
遍历字符串,每次从替代的字符串中找出最大的替代原字符串中的字符,替代后在替代串中删除该字符。当原字符串遍历完或者是替代串为空时,结束遍历。
import java.util.Scanner;

public class CharacterCover {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str1 = sc.nextLine();
        StringBuilder sb2 = new StringBuilder(sc.nextLine());
        StringBuilder sb = new StringBuilder(str1.length());
        int i;
        for (i = 0; i < str1.length() && sb2.length() > 0; i++){
            int index = 0;
           for (int j = 1; j < sb2.length(); j++){
               if (sb2.charAt(j) > sb2.charAt(index)){
                   index = j;
               }
           }
           if (sb2.charAt(index) > str1.charAt(i)){
               sb.append(sb2.charAt(index));
               sb2.deleteCharAt(index);
           }else {
               sb.append(str1.charAt(i));
           }
        }
        sb.append(str1.substring(i, str1.length()));
        System.out.print(sb.toString());
    }
}


发表于 2019-09-08 14:47:14 回复(0)