PAT乙級——1029(字串匹配)
阿新 • • 發佈:2019-02-10
題目:舊鍵盤 (20 分)
舊鍵盤上壞了幾個鍵,於是在敲一段文字的時候,對應的字元就不會出現。現在給出應該輸入的一段文字、以及實際被輸入的文字,請你列出肯定壞掉的那些鍵。
輸入格式:
輸入在 2 行中分別給出應該輸入的文字、以及實際被輸入的文字。每段文字是不超過 80 個字元的串,由字母 A-Z(包括大、小寫)、數字 0-9、以及下劃線 _(代表空格)組成。題目保證 2 個字串均非空。
輸出格式:
按照發現順序,在一行中輸出壞掉的鍵。其中英文字母只輸出大寫,每個壞鍵只輸出一次。題目保證至少有 1 個壞鍵。
輸入樣例:
7_This_is_a_test
_hs_s_a_es
輸出樣例:
7TI
題目分析及實現
首先這是一個好久沒出現過的直接AC的題目,開心一小下。
有幾個點需要注意:
- 匹配的時候大小寫不區分(大小寫的按鍵失效均為一個鍵)
- 輸出的時候英文字母均為大寫輸出
- 相同的按鍵只輸出一次
我的思路是迴圈從第一個字串中取資料在下一個字串中匹配(contains方法),沒有的話則加入一個空的字串out中去(不能定義為null,直接加後面的字串會找不到物件,可以初始化一個漢字),而後每次判斷到不存在的時候再去out做一下匹配,也沒有的話則加入並輸出,有的話則不操作。
import java.util.Scanner;
public class Y1029 {
public static void main(String []args) {
Scanner in =new Scanner(System.in);
String A =in.nextLine();
String B =in.nextLine();
String out ="";
for(int i=0;i<A.length();i++) {
String temp=A.substring(i, i+1);
//當是大寫字母時,需匹配這個字母的大寫和小寫在B中是否存在
if(temp.charAt(0)<='Z'&&temp.charAt(0)>='A') {
//將這個字元轉成小寫
String temp1=temp.toLowerCase();
if(B.contains(temp)==false&&B.contains(temp1)==false) {
//若不存在加入輸出佇列
if(out.contains(temp)==false&&out.contains(temp1)==false) {
out+=temp;
//System.out.print(temp.charAt(0));
}
}
}
//當是小寫字母時,需匹配這個字母的大寫和小寫在B中是否存在
else if(temp.charAt(0)<='z'&&temp.charAt(0)>='a') {
String temp1=temp.toUpperCase();
if(B.contains(temp)==false&&B.contains(temp1)==false)
//若不存在加入輸出佇列
if(out.contains(temp)==false&&out.contains(temp1)==false) {
out+=temp1;
//System.out.print(temp1.charAt(0));
}
}
else {
//其他字元時,只需要判斷是否存在
if(B.contains(temp)==false) {
if(out.contains(temp)==false) {
out+=temp;
//System.out.print(temp.charAt(0));
}
}
}
}
//也可以只輸出out,這樣就不需要在每一個判斷中單獨輸出
System.out.print(out);
}
}