典型棧問(wèn)題

簡(jiǎn)述

由于棧有后進(jìn)先出的特性,利用好棧的這一特性,可以輕松解決一些看似復(fù)雜的問(wèn)題。

例題目錄

例題

1、最長(zhǎng)有效括號(hào)
題目描述:

給定一個(gè)只包含 '(' 和 ')' 的字符串,找出最長(zhǎng)的包含有效括號(hào)的子串的長(zhǎng)度。

示例 1:

輸入: "(()"
輸出: 2
解釋: 最長(zhǎng)有效括號(hào)子串為 "()"

算法

維護(hù)一個(gè)棧,初始狀態(tài)下放入 -1,遍歷字符串
“(”時(shí), 入棧,
“)”時(shí), 彈出棧頂,如果此時(shí)??眨霔?;不為空,計(jì)算 i - stack[-1]

代碼
class Solution:
    def longestValidParentheses(self, s: str) -> int:
        stack = [-1]

        res = 0
        for i, char in enumerate(s):
            if char == '(':
                stack.append(i)
            else:
                stack.pop()
                if not stack:
                    stack.append(i)
                else:
                    res = max(res, i - stack[-1])
        return res

時(shí)間復(fù)雜度:O(n)
這個(gè)問(wèn)題也可以用動(dòng)態(tài)規(guī)劃來(lái)解決。參考

2、逆波蘭表達(dá)式求值
題目描述:

根據(jù)逆波蘭表示法,求表達(dá)式的值。

有效的運(yùn)算符包括 +, -, *, / 。每個(gè)運(yùn)算對(duì)象可以是整數(shù),也可以是另一個(gè)逆波蘭表達(dá)式。

說(shuō)明:

整數(shù)除法只保留整數(shù)部分。
給定逆波蘭表達(dá)式總是有效的。換句話說(shuō),表達(dá)式總會(huì)得出有效數(shù)值且不存在除數(shù)為 0 的情況。
示例 1:

輸入: ["2", "1", "+", "3", "*"]
輸出: 9
解釋: ((2 + 1) * 3) = 9

算法:

維護(hù)一個(gè)棧,遇到數(shù)字入棧,遇到符號(hào)彈出兩個(gè)數(shù)字計(jì)算后的值再入棧,最后棧中所剩的數(shù)就是結(jié)果。

代碼
class Solution:
    def evalRPN(self, tokens: List[str]) -> int:
        stack = []
        for token in tokens:
            if token == '/':
                v1 = stack.pop()
                v2 = stack.pop()
                stack.append(int(v2 / v1))
            elif token == '-':
                v1 = stack.pop()
                v2 = stack.pop()
                stack.append(v2 - v1)
            elif token == '+':
                v1 = stack.pop()
                v2 = stack.pop()
                stack.append(v2 + v1)
            elif token == '*':
                v1 = stack.pop()
                v2 = stack.pop()
                stack.append(v2 * v1)
            else:
                stack.append(int(token))
        return stack[-1]

時(shí)間復(fù)雜度:O(n)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容