判斷字元為空 力扣 844 比較含退格的字串

2021-10-16 03:20:44 字數 2286 閱讀 3119

844. 比較含退格的字串

給定st兩個字串,當它們分別被輸入到空白的文字編輯器後,判斷二者是否相等,並返回結果。#代表退格字元。

注意:如果對空文字輸入退格字元,文字繼續為空。

示例 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 <= 2001 <= t.length <= 200st只含有小寫字母以及字元'#'

高階

比較直觀的思路是順次掃瞄st的每乙個字元,把它們存在列表中:

這樣的解法時間複雜度為 ,空間複雜度也為 。

執行結果

執行結果:通過

執行用時:40 ms, 在所有 python3 提交中擊敗了77.02% 的使用者

記憶體消耗:13.6 mb, 在所有 python3 提交中擊敗了5.32% 的使用者

題目的高階要求的時間複雜度是 ,空間複雜度是 。這又是需要把空間複雜度從 降低到 的題目,跟昨天做的 19. 刪除鍊錶的倒數第n個節點一樣,都涉及到了指標。

具體做法是從末尾開始同時遍歷並比較st的字元:

class solution:

def backspacecompare(self, s: str, t: str) -> bool:

i, j = len(s) - 1, len(t) - 1

skipi = skipj = 0

while i >= 0 or j >= 0:

while i >= 0:

if s[i] == '#':

skipi += 1

i -= 1

continue

if not skipi:

break

i -= 1

skipi -= 1

while j >= 0:

if t[j] == '#':

skipj += 1

j -= 1

continue

if not skipj:

break

j -= 1

skipj -= 1

if i == j == -1:

return true

if i 0 or j 0:

return false

if s[i] != t[j]:

return false

i -= 1

j -= 1

return true

執行結果

執行結果:通過

執行用時:32 ms, 在所有 python3 提交中擊敗了97.75% 的使用者

記憶體消耗:13.5 mb, 在所有 python3 提交中擊敗了10.96% 的使用者

2020.10.19

力扣 844 比較含退格的字串(簡單)

給定 s 和 t 兩個字串,當它們分別被輸入到空白的文字編輯器後,判斷二者是否相等,並返回結果。代表退格字元。注意 如果對空文字輸入退格字元,文字繼續為空。示例 1 輸入 s ab c t ad c 輸出 true 解釋 s 和 t 都會變成 ac 示例 2 輸入 s ab t c d 輸出 tru...

力扣 比較含退格的字串

給定 s 和 t 兩個字串,當它們分別被輸入到空白的文字編輯器後,判斷二者是否相等,並返回結果。代表退格字元。注意 如果對空文字輸入退格字元,文字繼續為空。示例 1 輸入 s ab c t ad c 輸出 true 解釋 s 和 t 都會變成 ac 示例 2 輸入 s ab t c d 輸出 tru...

C C 字串為空判斷 效率比較

為了測試判斷字串為空的效率,今天特意做了乙個測試。得出以下結論 cstring s 我是乙個中國人 s.getlength 0 效率略快於 s.isempty 但是 s 0 0 效率比 getlength 低一倍。換成 string 又測了一次 string s.length 2730 毫秒 str...