PAT乙级——1093(字符串匹配)Java实现

版权声明:本文为博主原创文章,转载请注明原博客地址 https://blog.csdn.net/qunqunstyle99/article/details/84938626

题目:字符串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();
		//添加操作多,故使用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);
	}
}

在这里插入图片描述如有解决办法,万望留言告知,三月份的考试再见。

猜你喜欢

转载自blog.csdn.net/qunqunstyle99/article/details/84938626