题目:字符串A+B (20 分)
给定两个字符串 A 和 B,本题要求你输出 A+B,即两个字符串的并集。要求先输出 A,再输出 B,但重复的字符必须被剔除。
输入格式:
输入在两行中分别给出 A 和 B,均为长度不超过 10?6?? 的、由可见 ASCII 字符 (即码值为32~126)和空格组成的、由回车标识结束的非空字符串。
输出格式:
在一行中输出题面要求的 A 和 B 的和。
输入样例:
This is a sample test
to show you_How it works输出样例:
This ampletowyu_Hrk
题目分析及实现
我的办法是暴力破解,考试的时候也没有想到合适的方法,然后就果不其然的超时了,用Java考试至少少拿了10分。
两个大循环,依次判断,因为输出的都是在ascll表上码值32-126
范围内的,则当输出的字符串的长度达到 95 时,可以不用比较了,直接输出即可,后面的全是重复的。
Java还是如约的超时了。
//未AC 16分 两个超时
import java.util.Scanner;public class Y3 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);String one = in.nextLine();String two = in.nextLine();in.close();char[] num1 = one.toCharArray();char[] num2 = two.toCharArray();//添加操作多,故使用stringbuilderStringBuilder stringBuilder = new StringBuilder();//数组一for (int i = 0; i < num1.length; i++) {
//当达到95,直接跳出;if(stringBuilder.length()==95)break;String str =""+num1[i];//判断是否存在当前元素,有则跳过,没有则添加if(stringBuilder.indexOf(str)!=-1) continue;else stringBuilder.append(num1[i]);}//数组二for (int i = 0; i < num2.length; i++) {
//当达到95,直接跳出;if(stringBuilder.length()==95)break;String str =""+num2[i];if(stringBuilder.indexOf(str)!=-1) continue;else stringBuilder.append(num2[i]);}System.out.println(stringBuilder);}
}
如有解决办法,万望留言告知,三月份的考试再见。