1. 程式人生 > >PAT乙級——1093(字串匹配)Java實現

PAT乙級——1093(字串匹配)Java實現

題目:字串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); } }

在這裡插入圖片描述如有解決辦法,萬望留言告知,三月份的考試再見。