PAT乙級——1093(字串匹配)Java實現
阿新 • • 發佈:2018-12-10
題目:字串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);
}
}
如有解決辦法,萬望留言告知,三月份的考試再見。