乙級-1033旧キーボードタイプ(20点)

27495 ワード

古いキーボードにいくつかのキーが壊れているので、文字を叩くと対応する文字が現れません.入力すべき文字と、壊れたキーを与えて、文字はどうなりますか?
入力フォーマット
2行にそれぞれ壊れたキーと、入力すべき文字を入力します.ここで、英語のアルファベットに対応する悪いキーは大文字で与えられる.各セグメントの文字は105文字以下の列です.使用可能な文字には、アルファベット[a-z, A-Z] 0-9、アンダースコア_(スペースを表す)、,.-+(上位キーを表す)が含まれます.タイトルは、2行目に入力された文字列が空でないことを保証します.
注意:上段キーが壊れていると、大文字の英字は打てません.
出力フォーマット
1行に打出可能な結果文字を出力します.文字が1文字も打てない場合は空行を出力します.
入力サンプル
7+IE.
7_This_is_a_test.

出力サンプル
_hs_s_a_tst

Javaコード
1.(17分、テストポイント4運転タイムアウト)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        String[] strs = new String[2];
        strs[0] = in.nextLine();
        strs[1] = in.nextLine();

        boolean haveUpper = true;
        if (strs[0].contains("+")) {
            haveUpper = false;
        }

        StringBuilder output = new StringBuilder();

        for (int i = 0, len = strs[1].length(); i < len; i++) {
            char c = strs[1].charAt(i);
            //        !
            if (strs[0].indexOf(c) != -1) {
                continue;
            }
//                      
            if (!haveUpper && (c >= 'A' && c <= 'Z')) {
                continue;
            }
            //      
            if (strs[0].indexOf(Character.toUpperCase(c)) != -1) {
                continue;
            }
            output.append(c);
        }
        if (output.toString().equals("")) {
            System.out.println();
        } else {
            System.out.print(output);
        }
        System.out.print("");
    }
}

2.(AC)
BufferedReaderを使用すると、読み込み速度が比較されます.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String[] strs = new String[2];
        strs[0] = br.readLine();
        strs[1] = br.readLine();

        boolean haveUpper = true;
        if (strs[0].contains("+")) {
            haveUpper = false;
        }

        StringBuilder output = new StringBuilder();

        for (int i = 0, len = strs[1].length(); i < len; i++) {
            char c = strs[1].charAt(i);
            //        !
            if (strs[0].indexOf(c) != -1) {
                continue;
            }
            //             
            if (!haveUpper && (c >= 'A' && c <= 'Z')) {
                continue;
            }
            //      
            if (strs[0].indexOf(Character.toUpperCase(c)) != -1) {
                continue;
            }
            output.append(c);
        }
        if (output.toString().equals("")) {
            System.out.println();
        } else {
            System.out.print(output);
        }
        System.out.print("");
    }
}

3.(AC)
書き方を変える
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String str1 = br.readLine();
        String str2 = br.readLine();

        boolean[] badKey = new boolean[150];
        for (int i = 0, len = str1.length(); i < len; i++) {
            badKey[str1.charAt(i)] = true;
            if (str1.charAt(i) >= 'A' && str1.charAt(i) <= 'Z') {
                badKey[str1.charAt(i) + 32] = true;
            }
        }

        StringBuilder result = new StringBuilder();
        for (int i = 0, len = str2.length(); i < len; i++) {
            if (badKey[str2.charAt(i)]) {
                continue;
            }
            if (badKey['+'] && Character.isUpperCase(str2.charAt(i))) {
                continue;
            }
            result.append(str2.charAt(i));
        }

        System.out.println(result);
    }
}