1. 程式人生 > >LeetCode 844題 比較含退格的字串 -- JavaScript

LeetCode 844題 比較含退格的字串 -- JavaScript

題目描述:

給定 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. 1 <= S.length <= 200
  2. 1 <= T.length <= 200
  3. 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函式來對兩者執行退格處理。因為ST的處理方式一致,故我們把它封裝為一個函式,從而減少程式碼量和提高複用度。

backspace函式內,我們對字串進行遍歷。如果當前字元不是#的話,就將其輸出到結果字串中,否則就刪除結果字串的最後一個字元,也就是刪除掉原字串中#前面的那個字元,最後返回結果字串即可。

該演算法的時間複雜度為O(n),其中n為字串的長度

該演算法的空間複雜度為\small O(1)