【每日一題】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
- string.Compare使用筆記筆記
- 每日一題每日一題
- 每日一題2每日一題
- 記錄一個SSH client 退格鍵(backspace)無法正常使用的問題client
- 雲端計算每日一題每日一題
- CSDN專案:每日一題每日一題
- leetcode每日一題LeetCode每日一題
- 每日一題 -- 11-1每日一題
- 每日一題(94) - 堆排序每日一題排序
- 【每日一題】快照陣列每日一題陣列
- 每日一題: 有效括號每日一題
- PHP 每日一函式 — 字串函式 convert_cyr_string ()PHP函式字串
- [每日一題] 第十題:替換空格每日一題
- Leetcode每日一題(1)LeetCode每日一題
- [每日一題] 79. Word Search每日一題
- leetcode刷題--Compare Version NumbersLeetCode
- 4.4上海交大PMP試題每日一題每日一題
- 【MySQL】Incorrect string value 問題一則MySql
- 每日一題@49矩陣置零每日一題矩陣
- LeetCode每日一題:sort colorsLeetCode每日一題
- [每日一題] 第一題:判定是否互為字元重排每日一題字元
- js如何禁用Backspace退格鍵JS
- [每日一題] 第二題:反轉連結串列每日一題
- 12.5上海交大PMP試題每日一題每日一題
- 12.7上海交大PMP試題每日一題每日一題
- [每日一題] 第十七題:青蛙跳臺階問題每日一題
- 王者榮耀2月15日每日一題的答案是什麼 微信公眾號每日一題每日一題
- LeetCode 每日一題「判定字元是否唯一」LeetCode每日一題字元
- 每日一題:五 特別的數字每日一題
- 每日一題:三 墨西哥人浪每日一題
- 雲端計算每日一題(NO.0002)每日一題
- 雲端計算每日一題(NO.0009)每日一題
- 每日一題 2020.11.5每日一題
- [每日一題]140. Word Break II每日一題
- compare databaseDatabase
- 每日"兩"題 題解
- [每日一題] 第六題:不用加減乘除做加法每日一題