每天一道演算法題(2018 12 2)

2021-09-02 11:40:05 字數 989 閱讀 1844

題目:

給定乙個只包含"(", 「)」, 」[「,」]「, 」"的字串,判斷字串是否有效,有效字串需要滿足:

左括號必須用相同型別的右括號閉合;

左括號必須以正確的順序閉合。

例子:輸入:{}{}

輸出:true

輸入:輸出:false

輸入:輸出:true

剛剛看到題的時候,感覺還是挺複雜的,不過動手畫一畫,就能發現正確的字串是有規律的。什麼規律呢?

python **如下:

def isvalid(s):

stack =

dict = ', '(':')'}

for c in s:

if c in dict.values():

elif c in dict.keys():

if stack== or dict[c]!=stack.pop():

return false

else:

return false

return stack==

**比較簡單,這裡就不再舉相親的例子,只是簡要介紹乙個流程:

主要程序是乙個遍歷,另有乙個陣列用來儲存。

每次遇到乙個左括號我們就把它放到陣列stack中,如果遇到右括號,我們就需要判斷一下了:

首先判斷用來儲存的陣列是不是為空,如果為空,那自然就沒有相應的左括號了;也判斷這個陣列的最後乙個元素是不是和當前遇到的右括號匹配,如果不匹配,那也可以直接輸出false了,如果匹配,那就去掉陣列裡最後這個左括號,因為它已經被匹配掉了。

到了最後,我們再判斷用來儲存的陣列是否為空,如果為空,那麼說明左右括號都剛好被匹配完,輸出true,如果不為空,那就是有問題。

再強調一遍,這個題的題眼在於:

如果遇到右括號,那麼它必須與最近的乙個沒有被匹配過的左括號匹配。

更多演算法文章:

不含重複項的最長子串

相親問題

小偷問題

合併問題

每天一道演算法題

no.1 棧是特殊的線性表,它。a.對 b.錯答案 錯,它的插入和刪除都是在同一端進行的。no.2 n個葉子節點的滿二叉樹 除了葉子節點,每個節點都有兩個孩子 總共有多少個節點?a.2n 1 b.2n c.n 1 d.n答案 a 滿二叉樹我們講過了,度為0的節點比度為2的加點多乙個。滿二叉樹是特殊的...

每天一道演算法題

1.給定乙個只包括 的字串,判斷字串是否匹配。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。注意空字串可被認為是有效字串。思路 正確思路 不需要考慮輸入內容是否合法,這只是做題,不是工程 定義乙個字典,後括號為鍵,前半部分為值 定義乙個元素儲存棧頂,注意這個設定,取棧...

每天一道演算法題

1 js計算某個字串出現的次數 j ascript計算乙個字串最多重複的字元及出現次數.var str zhaochucichuzuiduodezifu var o for var i 0,length str.length i length i else console.log o 輸出的是完整的...