PAT1033 舊鍵盤打字(java實現)

TNTZS666發表於2019-01-19

題目地址:https://pintia.cn/problem-sets/994805260223102976/problems/994805288530460672

題目描述:

舊鍵盤上壞了幾個鍵,於是在敲一段文字的時候,對應的字元就不會出現。現在給出應該輸入的一段文字、以及壞掉的那些鍵,打出的結果文字會是怎樣?

  • 輸入格式
    輸入在 2 行中分別給出壞掉的那些鍵、以及應該輸入的文字。其中對應英文字母的壞鍵以大寫給出;每段文字是不超過 10^​5 個字元的串。可用的字元包括字母 [a-z, A-Z]、數字 0-9、以及下劃線 _(代表空格)、,、. 、-、+(代表上檔鍵)。題目保證第 2 行輸入的文字串非空。
    注意:如果上檔鍵壞掉了,那麼大寫的英文字母無法被打出。

  • 輸出格式
    在一行中輸出能夠被打出的結果文字。如果沒有一個字元能被打出,則輸出空行。


解題思路:先判斷壞鍵中有沒有’+’,有的話將unbroken中的大寫字母通過正規表示式都去掉,然後通過for迴圈遍歷新的unbroken字串中有沒有壞鍵代表的字元,去掉這部分後輸出result即可

注:java寫的最後一個測試點執行超時,試了好幾個其他人寫的也超時了,但我用stringbuffer寫相對程式碼量更少。僅供參考


程式:

import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
	public static void main(String[] args) throws Exception {
		BufferedReader read = new BufferedReader(new InputStreamReader(System.in));
		StringBuffer result = new StringBuffer();
		String broken = read.readLine();
		String unBroken = read.readLine();
		if (broken.contains("+")) {
			unBroken = unBroken.replaceAll("[A-Z]", "");
		}
		//System.out.println(unBroken);
		for (int i = 0; i < unBroken.length(); i++) {
			boolean flag = true;
			for (int j = 0; j < broken.length(); j++) {
				if (String.valueOf(unBroken.charAt(i)).toUpperCase()
						.equals(String.valueOf(broken.charAt(j)).toUpperCase())) {
					flag = false;
					break;
				}
			}
			if (flag == true) {
				result.append((String.valueOf(unBroken.charAt(i))));
			}
		}
		System.out.println(result);
	}

}

相關文章