給定s
和t
兩個字串,當它們分別被輸入到空白的文字編輯器後,判斷二者是否相等,並返回結果。#
代表退格字元。
注意:如果對空文字輸入退格字元,文字繼續為空。
示例 1:
示例 2:輸入:s = "ab#c", t = "ad#c"
輸出:true
解釋:s 和 t 都會變成 「ac」。
示例 3:輸入:s = "ab##", t = "c#d#"
輸出:true
解釋:s 和 t 都會變成 「」。
示例 4:輸入: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
只含有小寫字母以及字元'#'
。
高階:
遍歷字串,若當前字元不為 '#' ,將其壓入棧中,否則彈出棧頂元素,最後比較兩個棧的元素是否一致
class solution:
def backspacecompare(self, s: str, t: str) -> bool:
l1 = ''
l2 = ''
for s in s:
if s == '#':
l1 = l1[:-1]
else:
l1 = l1 + s
for s in t:
if s == '#':
l2 = l2[:-1]
else:
l2 = l2 + s
if l1 == l2:
return true
else:
return false
倒序遍歷字串,原地刪除 '#' 和它之前的字元
乙個字元是否會被刪掉,只取決於該字元後面的退格符,而與該字元前面的退格符無關。因此當我們逆序地遍歷字串,就可以立即確定當前字元是否會被刪掉。
具體地,我們定義 skip 表示當前待刪除的字元的數量。每次我們遍歷到乙個字元:
若該字元為退格符,則我們需要多刪除乙個普通字元,我們讓 skip 加 1;
若該字元為普通字元:
若 skip 為 0,則說明當前字元不需要刪去;
若 skip 不為 0,則說明當前字元需要刪去,我們讓 skip 減 1。
這樣,我們定義兩個指標,分別指向兩字串的末尾。每次我們讓兩指標逆序地遍歷兩字串,直到兩字串能夠各自確定乙個字元,然後將這兩個字元進行比較。重複這一過程直到找到的兩個字元不相等,或遍歷完字串為止。
class solution:
def backspacecompare(self, s: str, t: str) -> bool:
i, j = len(s) - 1, len(t) - 1
skips = skipt = 0
while i >= 0 or j >= 0:
while i >= 0:
if s[i] == "#":
skips += 1
i -= 1
elif skips > 0:
skips -= 1
i -= 1
else:
break
while j >= 0:
if t[j] == "#":
skipt += 1
j -= 1
elif skipt > 0:
skipt -= 1
j -= 1
else:
break
if i >= 0 and j >= 0:
if s[i] != t[j]:
return false
elif i >= 0 or j >= 0:
return false
i -= 1
j -= 1
return true
比較含退格的字串
給定 s 和 t 兩個字串,當它們分別被輸入到空白的文字編輯器後,判斷二者是否相等,並返回結果。代表退格字元。示例 1 輸入 s ab c t ad c 輸出 true 解釋 s 和 t 都會變成 ac 示例 2 輸入 s ab t c d 輸出 true 解釋 s 和 t 都會變成 示例 3 輸入...
比較含退格的字串
給定 s 和 t 兩個字串,當它們分別被輸入到空白的文字編輯器後,判斷二者是否相等,並返回結果。代表退格字元。題目鏈結 很簡單的思路,利用棧,遍歷字串,凡是碰見不是 的入棧,一旦遇到 且棧不為空的話,就出棧乙個元素。class solution elseif stack.empty chars i ...
比較含退格的字串
比較含退格的字串 題目描述 給定 s 和 t 兩個字串,當它們分別被輸入到空白的文字編輯器後,判斷二者是否相等,並返回結果。代表退格字元。示例 1 輸入 s ab c t ad c 輸出 true 解釋 s 和 t 都會變成 ac 示例 2 輸入 s ab t c d 輸出 true 解釋 s 和 ...