LeetCode 844 比較含退格的字串

2021-10-24 22:28:03 字數 2579 閱讀 1012

給定 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」。

高階:

你可以用 o(n) 的時間複雜度和 o(1) 的空間複雜度解決該問題嗎?

思路及演算法

最容易想到的方法是將給定的字串中的退格符和應當被刪除的字元都去除,還原給定字串的一般形式。然後直接比較兩字串是否相等即可。

具體地,我們用棧處理遍歷過程,每次我們遍歷到乙個字元:

c++

class solution 

string build(string str) else if (!ret.empty())

}return ret;}};

python

class solution:

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

def build(s: str) -> str:

ret = list()

for ch in s:

if ch != "#":

elif ret:

ret.pop()

return "".join(ret)

return build(s) == build(t)

複雜度分析思路及演算法

乙個字元是否會被刪掉,只取決於該字元後面的退格符,而與該字元前面的退格符無關。因此當我們逆序地遍歷字串,就可以立即確定當前字元是否會被刪掉。

具體地,我們定義 skip 表示當前待刪除的字元的數量。每次我們遍歷到乙個字元:

這樣,我們定義兩個指標,分別指向兩字串的末尾。每次我們讓兩指標逆序地遍歷兩字串,直到兩字串能夠各自確定乙個字元,然後將這兩個字元進行比較。重複這一過程直到找到的兩個字元不相等,或遍歷完字串為止。

c++

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;}};

python

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

複雜度分析1、

leetcode 844 比較含退格的字串

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

leetcode 844 比較含退格的字串

近期一直在用python刷leetcode的題,都提交到了github上了 給定s和t兩個字串,當它們分別被輸入到空白的文字編輯器後,判斷二者是否相等,並返回結果。代表退格字元。示例 1 輸入 s ab c t ad c 輸出 true 解釋 s 和 t 都會變成 ac 示例 2 輸入 s ab t...

LeetCode 844 比較含退格的字串

輸入 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 輸出 fa...