【每日一題】844. Backspace String Compare
題目意思,#號相當於刪除符,當出現#時,需要刪除它前面的那個字元,如果出現連續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,老是容易忘
相關文章
- [LeetCode] 844. Backspace String CompareLeetCode
- 【每日一包0015】gradient-string
- 每日一題每日一題
- leetcode每日一題LeetCode每日一題
- 每日一題 2020.11.5每日一題
- 每日一題2每日一題
- 【每日一題】20241205每日一題
- 每日一題1每日一題
- 【每日一題】20241203每日一題
- 【每日一題】20241208每日一題
- PHP 每日一函式 — 字串函式 convert_cyr_string ()PHP函式字串
- JAVA每日一題20201109Java每日一題
- Leetcode每日一題(1)LeetCode每日一題
- sicp每日一題[2.79]每日一題
- sicp每日一題[2.47]每日一題
- sicp每日一題[2.49]每日一題
- sicp每日一題[2.56]每日一題
- sicp每日一題[2.30]每日一題
- sicp每日一題[2.29]每日一題
- sicp每日一題[2.33]每日一題
- sicp每日一題[2.78]每日一題
- sicp每日一題[2.82]每日一題
- sicp每日一題[2.83]每日一題
- sicp每日一題[2.59]每日一題
- sicp每日一題[2.60]每日一題
- sicp每日一題[1.44]每日一題
- sicp每日一題[2.71]每日一題
- sicp每日一題[2.19]每日一題
- sicp每日一題[2.6]每日一題
- sicp每日一題[1.45]每日一題
- sicp每日一題[1.46]每日一題
- sicp每日一題[2.62]每日一題
- sicp每日一題[2.58]每日一題
- sicp每日一題[2.10]每日一題
- sicp每日一題[2.3]每日一題
- sicp每日一題[2.1]每日一題
- sicp每日一題[2.2]每日一題
- sicp每日一題[2.7]每日一題