力扣 比較退格的字串

2021-10-24 22:42:28 字數 1593 閱讀 8791

給定 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...