給定 s 和 t 兩個字串,當它們分別被輸入到空白的文字編輯器後,判斷二者是否相等,並返回結果。 # 代表退格字元。
注意:如果對空文字輸入退格字元,文字繼續為空。
示例 1:
輸入:s = 「ab#c」, t = 「ad#c」
輸出:true
解釋:s 和 t 都會變成 「ac」。
示例 2:
輸入:s = 「ab##」, t = 「c#d#」
輸出:true
解釋:s 和 t 都會變成 「」。
示例 3:
輸入:s = 「a##c」, t = 「#a#c」
輸出:true
解釋:s 和 t 都會變成 「c」。
示例 4:
輸入:s = 「a#c」, t = 「b」
輸出:false
解釋:s 會變成 「c」,但 t 仍然是 「b」。
1 <= s.length <= 200
1 <= t.length <= 200
s 和 t 只含有小寫字母以及字元 『#』。
高階:你可以用 o(n) 的時間複雜度和 o(1) 的空間複雜度解決該問題嗎?
將應該刪除的字元和退格字元都刪除掉, 還原原本的字串,然後直接比較兩個字串是否相等即可
用棧處理遍歷過程, 每次我們遍歷到乙個字元:
要注意的一點是如果棧為空棧且此時遍歷到的字元為退格符, 因不做任何處理
class
solution
string build
(string str)
elseif(
!ret.
empty()
)//注意考慮空棧時出現退格符這種情況
}return ret;}}
;
利用兩個指標分別逆向遍歷字串, 由於某個字元是否會被刪掉只取決於該字元後面的退格符,而與該字元前面的退格符無關,因此當逆序遍歷字串時, 就可以立即確定當前字元時候會被刪掉.
定義 skip 表示當前待刪除的字元的數量。每次我們遍歷到乙個字元:
若該字元為退格符,則我們需要多刪除乙個普通字元,我們讓skip 加 11;
若該字元為普通字元:
若skip==0,則說明當前字元不需要刪去;
若 skip!=0,則說明當前字元需要刪去,我們讓skip 減 11。
這樣,我們定義兩個指標,分別指向兩字串的末尾。每次我們讓兩指標逆序地遍歷兩字串,直到兩字串能夠各自確定乙個字元(此時該字元不是』#』, 且skip==0),然後將這兩個字元進行比較。重複這一過程直到找到的兩個字元不相等,或遍歷完字串為止。
class
solution
else
if(skips >0)
else
}while
(j >=0)
else
if(skipt >0)
else}if
(i >=
0&& j >=0)
}else
} i--
, j--;}
return
true;}
};
力扣 比較含退格的字串
給定 s 和 t 兩個字串,當它們分別被輸入到空白的文字編輯器後,判斷二者是否相等,並返回結果。代表退格字元。注意 如果對空文字輸入退格字元,文字繼續為空。示例 1 輸入 s ab c t ad c 輸出 true 解釋 s 和 t 都會變成 ac 示例 2 輸入 s ab t c d 輸出 tru...
力扣 844 比較含退格的字串(簡單)
給定 s 和 t 兩個字串,當它們分別被輸入到空白的文字編輯器後,判斷二者是否相等,並返回結果。代表退格字元。注意 如果對空文字輸入退格字元,文字繼續為空。示例 1 輸入 s ab c t ad c 輸出 true 解釋 s 和 t 都會變成 ac 示例 2 輸入 s ab t c d 輸出 tru...
判斷字元為空 力扣 844 比較含退格的字串
844.比較含退格的字串 給定s和t兩個字串,當它們分別被輸入到空白的文字編輯器後,判斷二者是否相等,並返回結果。代表退格字元。注意 如果對空文字輸入退格字元,文字繼續為空。示例 1 輸入 s ab c t ad c 輸出 true 解釋 s 和 t 都會變成 ac 示例 2 輸入 s ab t c...