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

熊仙森發表於2018-12-10

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

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

相關文章