首页 > 试题广场 >

字符覆盖

[编程题]字符覆盖
  • 热度指数: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
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)