LeetCode 844題 比較含退格的字串 -- JavaScript
阿新 • • 發佈:2019-02-11
題目描述:
給定 S
和 T
兩個字串,當它們分別被輸入到空白的文字編輯器後,判斷二者是否相等,並返回結果。 #
代表退格字元。
示例 :
輸入:S = "ab#c", T = "ad#c" 輸出:true 解釋:S 和 T 都會變成 "ac"。
輸入:S = "ab##", T = "c#d#" 輸出:true 解釋:S 和 T 都會變成 ""。
輸入:S = "a##c", T = "#a#c" 輸出:true 解釋:S 和 T 都會變成 "c"。
輸入:S = "a#c", T = "b" 輸出:false 解釋:S 會變成 "c",但 T 仍然是 "b"。
提示:
1 <= S.length <= 200
1 <= T.length <= 200
S
和T
只含有小寫字母以及字元 '#'。
方法分析:
這道題目只要弄清了題意,就很簡單。 #
代表退格字元,其會將它前面的那個字元在字串中清除掉,當然,該字元本身也不會出現在結果之中。例如,對於字串"a#b"得到的結果就為"b";對於字串"#ab#c"得到的結果就為"ac"。而且要注意到,每一次的操作都將直接對原字串進行修改。
程式碼實現:
var backspaceCompare = function(S, T) { return backspace(S) == backspace(T); }; function backspace(str) { let backspaceStr = ''; for(let i = 0;i < str.length;i++) { backspaceStr = str[i] != "#" ? backspaceStr + str[i] : backspaceStr.slice(0,-1); } return backspaceStr; }
程式碼解析:
在backspaceCompare函式內部,我們分別呼叫backspace函式來對兩者執行退格處理。因為S和T的處理方式一致,故我們把它封裝為一個函式,從而減少程式碼量和提高複用度。
在backspace函式內,我們對字串進行遍歷。如果當前字元不是#的話,就將其輸出到結果字串中,否則就刪除結果字串的最後一個字元,也就是刪除掉原字串中#前面的那個字元,最後返回結果字串即可。
該演算法的時間複雜度為,其中n為字串的長度
該演算法的空間複雜度為。