表達式求值--面試準備

241. Different Ways to Add Parentheses

150. Evaluate Reverse Polish Notation

224. Basic Calculator

32. Longest Valid Parentheses

題意:給定一個字符串,是由 ‘(’ 和 ‘)’ 兩種字符組成,尋找最長的合法的括號子串。

輸入:")()())"
輸出:4

思路:
當然是用棧來進行括號匹配,只是得求最長的合法的括號子串,
可能字符串中有些括號不匹配導致把字符串切分成多個子串,我們需要記錄一下不匹配字符的下標,然後知道合法子串有多少個,從而求出最長的。

class Solution(object):
    def longestValidParentheses(self, s):
        
        if not s: return 0
        
        stack = [-1]
        res = 0
        
        for i in range(len(s)):
            if s[i] == '(':
                stack.append(i)
            else:
                stack.pop()  # 已經初始化棧了,有一個元素
                if not stack:
                    stack.append(i)
                else:
                    res = max(res, i - stack[-1])  # 遇到非法字符從而切分字符串了
        
        return res
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章