leetcode python3 字符串編碼

給定一個經過編碼的字符串,返回它解碼後的字符串。

編碼規則爲: k[encoded_string],表示其中方括號內部的 encoded_string 正好重複 k 次。注意 k 保證爲正整數。

你可以認爲輸入字符串總是有效的;輸入字符串中沒有額外的空格,且輸入的方括號總是符合格式要求的。

此外,你可以認爲原始數據不包含數字,所有的數字只表示重複的次數 k ,例如不會出現像 3a 或 2[4] 的輸入。

這道題是高頻題,從括號匹配角度看,是棧的典型應用,字符串中可能出現的字符共有四種:字母,數字字符,左括號,右括號,分別對幾種情況進行討論,首先需要定義一個棧來存儲臨時數字和字符串,

class Solution:

    def decodeString(self, s: str) -> str:

        # use stack to solve the string decode

        stack = []   # 定義棧

        res = ''  # 定義臨時字符串

        multi = 0  # 定義遞增倍數

        for c in s:   # 對給定字符串中每一個字符進行循環判斷

            if c == '[':  # 當出現左括號時,此時將臨時字符和乘數作爲數組壓入棧

                stack.append([multi, res])

                multi, res = 0, ''   # 同時需要置位0,以進行循環

            elif c == ']':  # 當出現右括號時,說明此時的臨時字符串已經爲最近的【】內字符了

                cur_multi, last_res = stack.pop()  # 彈出保存的臨時變量,可以發現此時彈出的最近字符串即爲乘完之後的剩餘字符串,因爲前後關係,此時的乘數即爲當前乘數,

                res = last_res + cur_multi * res  # 更新res臨時變量

            elif '0' <= c <= '9':   # 判斷是否爲數字字符,保存

                multi = multi * 10 + int(c)

            else:   # 如果爲字符,簡單相加存儲臨時變量即可

                res += c

        return res

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章