【每日一題】844. Backspace String Compare

SJTUKK發表於2020-10-19

題目意思,#號相當於刪除符,當出現#時,需要刪除它前面的那個字元,如果出現連續n個#號,那麼將刪除第一個#前面的n個字元。如果#前面已經沒有字元了,那麼就不刪除了。

直觀來看,從後往前遍歷,當碰到#號的時候就刪除#號前面的字元。當然這裡有一些細節

  • 當出現多個連續#號的時候,就不是直接刪除#號前面的字元了,而是需要記錄#號出現的個數,記作num
  • 當前字元是#時,num++,當前字元不是#時,判斷num是否大於0,如果大於0,說明之前出現過#,那麼刪除當前字元,並使num–
  • python中無法直接對字串做刪除操作,先把字串轉換為列表在進行刪除操作
# 遍歷了兩次,效率有點拉跨
class Solution:
    def convert(self, string):
        s = list(string)         #轉成list
        pos = len(s) - 1
        num = 0
        while (pos >= 0):  #從後往前遍歷
            if (s[pos] != '#' and num > 0):
                num -= 1
                del s[pos] 		#刪除當前字元
            elif (s[pos] == '#'):
                del s[pos]
                num += 1
            pos -= 1
        return s
                    
    def backspaceCompare(self, S: str, T: str) -> bool:
        s = self.convert(S)
        t = self.convert(T)
        if(len(s) != len(t)):
            return False
        else:
            for i in range(0, len(s)):
                if(s[i] != t[i]):
                    return False
            return True

上面是第一版的程式碼,我們發現在刪除操作的時候,遍歷了S,T字串一次,然後在比較刪除後的字串是否相等的時候,又遍歷了一次,所以總共遍歷了兩次,時間複雜度有點拉跨。

python類中寫function一定要寫seft引數,呼叫的時候也要使用self.function,老是容易忘

相關文章