1. 程式人生 > >PAT乙級——1029(字串匹配)

PAT乙級——1029(字串匹配)

題目:舊鍵盤 (20 分)

舊鍵盤上壞了幾個鍵,於是在敲一段文字的時候,對應的字元就不會出現。現在給出應該輸入的一段文字、以及實際被輸入的文字,請你列出肯定壞掉的那些鍵。

輸入格式:
輸入在 2 行中分別給出應該輸入的文字、以及實際被輸入的文字。每段文字是不超過 80 個字元的串,由字母 A-Z(包括大、小寫)、數字 0-9、以及下劃線 _(代表空格)組成。題目保證 2 個字串均非空。

輸出格式:
按照發現順序,在一行中輸出壞掉的鍵。其中英文字母只輸出大寫,每個壞鍵只輸出一次。題目保證至少有 1 個壞鍵。

輸入樣例:
7_This_is_a_test
_hs_s_a_es

輸出樣例:
7TI

題目分析及實現

首先這是一個好久沒出現過的直接AC的題目,開心一小下。
有幾個點需要注意:

  1. 匹配的時候大小寫不區分(大小寫的按鍵失效均為一個鍵)
  2. 輸出的時候英文字母均為大寫輸出
  3. 相同的按鍵只輸出一次

我的思路是迴圈從第一個字串中取資料在下一個字串中匹配(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); } }

在這裡插入圖片描述