表示式求值 面試準備

2021-10-05 18:56:04 字數 706 閱讀 6982

題意:給定乙個字串,是由 『(』 和 『)』 兩種字元組成,尋找最長的合法的括號子串。

輸入:")()())"

輸出:4

思路:當然是用棧來進行括號匹配,只是得求最長的合法的括號子串,

可能字串中有些括號不匹配導致把字串切分成多個子串,我們需要記錄一下不匹配字元的下標,然後知道合法子串有多少個,從而求出最長的。

class

solution

(object):

deflongestvalidparentheses

(self, s):if

not s:

return

0

stack =[-

1]res =

0for i in

range

(len

(s))

:if s[i]

=='('

:else

: stack.pop(

)# 已經初始化棧了,有乙個元素

ifnot stack:

else

: res =

max(res, i - stack[-1

])# 遇到非法字元從而切分字串了

return res

表示式求值

程式的說明見清華大學出版社 資料結構 c語言版 include include define stack init size 40 define stackincrement 20 define ok 1 define false 0 typedef structs stack typedef st...

表示式求值

既然是表示式求值,自然需要在記憶體中儲存計算結果以及中間值。在 用c語言寫直譯器 一 中提過 變數要求是若型別,而 c 語言中的 view plaincopy to clipboardprint?in basic io.h define memery size 26 typedef enum var...

表示式求值

寫了乙個下午,各種糾結,各種問,終於搞明白了。但是自己還是想出來的一點東西的。很爽歪歪的,哈哈。先貼第一次的 include include include include include includeusing namespace std char data 7 7 int sign char ...