LintCode 1905. 字元刪除 Java

Cold__Winter發表於2020-11-09

題目描述

輸入兩個字串,從第一字串中刪除第二個字串中所有的字元

樣例 1:
輸入: str=”They are students”,sub=”aeiou”
輸出: ”Thy r stdnts”

注意事項

String contains spaces(包含空格)

1 ≤ len(str),len(sub) ≤​​105

思路+程式碼

第一反應就是雙迴圈遍歷,但是根據提示的長度,感覺會很費時間甚至超時,

所以空間換時間,用一個hash陣列記錄要刪除的字元(對應的ASCII碼)。遍歷原字串,把不刪的字元拼成一個新字串返回。

public class Solution {
    /**
     * @param str: The first string given
     * @param sub: The given second string
     * @return: Returns the deleted string
     */
    public String CharacterDeletion(String str, String sub) {
    	//hash陣列
        int[] res = new int[10000];		
        //StringBuilder的拼接速度快
        StringBuilder sb = new StringBuilder();
        //記錄刪除的字元
        for (int i = 0; i < sub.length(); i++) {
            res[sub.charAt(i)] ++;
        }
        //拼接字串
        for (int i = 0; i < str.length(); i++) {
            if(res[str.charAt(i)]>0){
                continue;
            }else{
                sb.append(str.charAt(i));
            }
        }
        //返回新字串
        return sb.toString();
    }
}

結果:

在這裡插入圖片描述

相關文章