給定乙個只包括 『(』,』)』,』』,』[』,』]』 的字串 s ,判斷字串是否有效。示例 1:有效字串需滿足: 左括號必須用相同型別的右括號閉合。 左括號必須以正確的順序閉合。
輸入:s
="()"
輸出:true
示例 2:
輸入:s
="(){}"
輸出:true
示例 3:
輸入:s
="(]"
輸出:false
示例 4:
輸入:s
="([)]"
輸出:false
示例 5:
輸入:s=""
輸出:true
(
leetcode)/
/leetcode-cn
.com
/leetbook
/read
/2021
-spring-recruitment/9
ht621
/通過題目描述可以看出,最能體現括號特點的是括號巢狀的時候。在多個括號巢狀的時候最後進去的左括號要最先由右括號閉合。因為有這種最後進入的要最先出來的特點,要使用「棧」結構作為主結構。
括號應該如何推入棧中?因為正常情況下總是』(『先出現,因此將』('當作入棧的元素。
從棧中pop出來時應該如何與』)'匹配?用hashmap或function將左括號與右括號做匹配。
目前此題目的資料結構決定為 stack 和 hashmap,主要流程為
bool
isvalid
(string s)';
leftrmap[
'[']
=']'
;/*遍歷整個字串*/
for(
int index=
0; index < s.
size()
;index++
)else
stk.
pop();
}}}
有2種cases需要特別地解決:
當string全是「(」 or 「)」 多出時的處理
當string全是 「((」 時,因為沒有 「)」 所以stack裡的值刪除不了,因此在string都遍歷完畢後 stack裡有值的一定是 「(」 多出來了。
return stk.
empty()
;
當string中 「)」 多出來時,stack裡面一定是空的()
if
(charstack.
empty()
|| charstack.
top(
)!= s[i]
)
上述**的charstack.empty()解決了這個問題 20 有效的括號(棧)
判斷括號是否匹配,思路是 1 需要乙個輔助資料結構棧,將字串從第乙個字元開始逐個遍歷,如果該字元是左括號,如 則判斷該字元是否與棧頂的括號匹配。如果匹配,進入下一輪迴圈,即判斷下乙個字元。如果不匹配,直接退出函式,返回false,即無效括號。3 如果字串中每乙個字元都遍歷完了,最後看棧是否為空,如果...
20 有效的括號(括號匹配 棧)
給定乙個只包括 的字串 s 判斷字串是否有效。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。示例 1 輸入 s 輸出 true 示例 2 輸入 s 輸出 true 示例 3 輸入 s 輸出 false 示例 4 輸入 s 輸出 false 示例 5 輸入 s 輸出 t...
20 有效的括號 (棧的使用)
題目描述 括號 小括號 中括號 大括號 的匹配 傳送門 解法 資料結構 中作為例子引出棧的概念。用乙個棧維護,從左到右掃瞄目標字串,如果括號匹配,即滿足三種情況 s i stack.top s i stack.top s i stack.top else if s i stack.top else ...