最近沒有刷題,而是在PTA找幾個題目尋找有關程序輸入流問題以及各種語言在運行時對計算機消耗內存的問題,
以免很多同學解題的時候發現自己做的對但是出現運行超時的問題;針對運行內存,肯定用C/C++的同學很少遇到這
樣的問題,但是使用Java的同學可能經常遇到此類問題並且優化不出更好的方法,在這里,我會針對PTA中A-B問題
對三種語言正確解題方法和三種語言的程序在運行時消耗資源的相互對比。
題目:L1-011 A-B (20 分)
本題要求你計算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!
題意總結:這道題的大概意思就是輸入一行字符串,回車,在輸入一行字符串,回車,輸出最開始輸入的字符串,但是不能出現第二行輸入的字符串的字符
很簡單的一道L1題,復雜度在O(n)並且 符合題意就能滿分
解題步驟:創建一個能存儲char類型總長度的int數組,將B串的各個字符轉換為數字對應在int數組的index賦值為1,循環判斷A串各個字符在int數組不為1就輸出
C語言解題代碼:

C語言提交結果:

Python解題代碼:

Python語言提交結果:

Java語言題解:

Java語言提交結果:

從上面的數據看得出來,C語言的程序耗時最短,內存消耗最小,因為C語言的編譯原理的性質(直接編譯為obj鏈接Link轉為單獨的可執行exe)
所以不會占用太多內存,然而java和python的原理都是目標程序放到虛擬機機執行(JVM&PYM),所以虛擬機本身也會占用點內存空間,加上
程序本身的內存,所以兩種語言相比C語言占用內存和消耗時間都會更多。肉眼可見Python的耗時與內存都小於Java,我並不知道是JVM虛擬機
本身沒有優化好或者還是其他方面原因,但是Python的程序確實在耗時與內存都小於Java。其次Java在解題中若使用了Scanner的輸入方法會
導致程序有兩處的運行超時,使用了更好的輸入流(BufferReader)后,還是會有一處運行超時,所以我的評價是在解題中最好放棄使用Java,
因為Java不僅僅是在輸入方面出現過超時,在循環、if-else等方面也有類似情況,使用c或python就不會出現類似問題
