L1-011. A-B(C和Java)PAT團體程序設計天梯賽-練習集

本題要求你計算A-B。不過麻煩的是,A和B都是字符串 —— 即從字符串A中把字符串B所包含的字符全刪掉,剩下的字符組成的就是字符串A-B。

輸入格式:

輸入在2行中先後給出字符串A和B。兩字符串的長度都不超過104,並且保證每個字符串都是由可見的ASCII碼和空白字符組成,最後以換行符結束。

輸出格式:

在一行中打印出A-B的結果字符串。

輸入樣例:

I love GPLT! It’s a fun game!
aeiou

輸出樣例:

I lv GPLT! It’s fn gm!


注意啦:本題限時100ms,所以Java肯定超時,除非運氣好。機智用C

C代碼:

#include <stdio.h>

int main()
{
    char A[10001], B[10001];
    gets(A);
    gets(B);
    int del[256] = {0};

    // 標記要刪除的字符 
    for (int i = 0; B[i] != '\0'; i++)
    {
        del[B[i]] = 1;
    }

    for (int i = 0; A[i] != '\0'; i++)
    {
        // 如果不用刪除,就打印 
        if (!del[A[i]]) 
        {
            printf("%c", A[i]); 
        }
    }

    return 0;
 } 

JAVA代碼:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
//import java.util.Scanner;

public class Main {

    public static void main(String[] args) throws IOException {
//      Scanner scanner = new Scanner(System.in);
//      char[] A = scanner.nextLine().toCharArray();
//      char[] B = scanner.nextLine().toCharArray();

        // 爲提升速度,使用BufferReader, 結果同樣超時
        BufferedReader bReader = new BufferedReader(
                    new InputStreamReader(System.in));
        char[] A = new char[10001];
        char[] B = new char[10001];

        try {
            A = bReader.readLine().toCharArray();
            B = bReader.readLine().toCharArray();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        // 定義要被刪除字符的數組
        boolean[] delete = new boolean[256];

        // B數組中出現的字符,都要被刪除
        for (int i = 0; i < B.length; i++) {
            delete[B[i]] = true;
        }

        for (int i = 0; i < A.length; i++) {
            // 如果A中這個字符不用刪除就打印
            if (!delete[A[i]]) {
                System.out.print(A[i]);
            }
        }

        // 及時關閉
        bReader.close();
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章