PAT乙级——1093(字符串匹配)Java实现
题目:字符串A+B (20 分)
给定两个字符串 A 和 B,本题要求你输出 A+B,即两个字符串的并集。要求先输出 A,再输出 B,但重复的字符必须被剔除。
输入格式:
输入在两行中分别给出 A 和 B,均为长度不超过 106 的、由可见 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();
//添加操作多,故使用stringbuilder
StringBuilder 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);
}
}
如有解决办法,万望留言告知,三月份的考试再见。