官方解答 · 置頂Python
官方解答|標籤編輯盒
官方解答
Python #460:標籤編輯盒
解題規則
編輯盒連續處理目前的標籤文字,並留下兩個階段的快照。
TextSession 保存目前 text 與空 history。先呼叫 first_edit(extra),規則為「在目前文字尾端接上 extra」;再對更新後的文字呼叫 second_edit(extra),規則為「目前文字加上方括號,再在尾端接extra」。每次更新後將完整文字加入 history。最後回傳 [兩個快照組成的清單,最後文字的字元數]。
處理步驟
first_edit 更新目前 text 並保存第一個字串;second_edit 使用這個更新後的 text 再處理。report 回傳兩份文字快照與最後字元數。
為何正確
物件屬性保存當前狀態;負責更新的方法依當時屬性完成一次更新與必要的快照,讀值步驟只讀取目前屬性。初始化及逐次更新維持題目指定的狀態,因此最後回傳的資料符合指定摘要。
邊界與注意事項
本題輸入範圍:每段0~30字元,只含ASCII文字。除非題目明確要求,不自動移除空白。 除題目指定的篩選或移除外,保留原資料的重複項與順序;使用切片或明確判斷安全處理允許的空資料。 需要清單快照時另外複製,兩個物件的清單與計數彼此獨立。
範例追蹤
依參數順序 text, extra 傳入 ["","A2"]。關鍵中間資料為 session = {'text': '[A2]A2', 'history': ['A2', '[A2]A2']}。最後回傳 [['A2', '[A2]A2'], 6]。結果由 return 回傳,不使用 print。
複雜度
設輸入及必要輸出的總大小為 n;複製、轉換或掃描最壞時間 O(n),保存中間資料與回傳結果最壞需要 O(n) 空間。
CodeSprout 官方解答 · 題意分析、解題步驟與完整參考程式
class TextSession:
def __init__(self, text):
self.text = text
self.history = []
def first_edit(self, extra):
self.text = self.text + extra
self.history.append(self.text)
def second_edit(self, extra):
self.text = '[' + self.text + ']' + extra
self.history.append(self.text)
def report(self):
return [list(self.history), len(self.text)]
def solve(text, extra):
session = TextSession(text)
session.first_edit(extra)
session.second_edit(extra)
return session.report()
留言討論 0
登入 後就能留言,一起討論不同的寫法。