給定乙個只包括 『(』,』)』,』』,』[』,』]』 的字串 s ,判斷字串是否有效。
有效字串需滿足:
左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。
示例 1:輸入:s = 「()」
輸出:true
示例 2:輸入:s = 「(){}」
輸出:true
示例 3:輸入:s = 「(]」
輸出:false
示例 4:輸入:s = 「([)]」
輸出:false
示例 5:首先,若想要給的字串中的括號都是有效的,字串 s 的長度必須為偶數,若為奇數一定不會匹配,返回false。輸入:s = 「」
輸出:true
棧(先進後出)
遍歷字串 s,每當遇到左括號時,就將其對應的右括號壓棧。當遇到右括號時,將其與棧頂元素進行比較(因為,若想乙個括號能夠匹配,其左括號一定是在右括號的左邊才有可能匹配,而當遇見第乙個右括號時,只有距離它最近的乙個未匹配過的左括號才可能與它匹配(也就是比較它和最後乙個入棧的右括號是否相同))。
(1) 每當遇見右括號且棧頂元素不同時,返回false。
(2) 當遇到右括號時,棧是空的(),返回false。
(3) 字串 s 全部遍歷完成後,若棧中還有剩餘的元素,則說明未完全匹配,返回false。
class
solution
char
c = s.
tochararray()
;for
(int i=
0;i)else
if(c[i]
=='['
)else
if(c[i]
=='');
}else
if(stack.
isempty()
|| c[i]
!= stack.
pop())
}//當全部匹配結束後,棧中仍有元素則返回falseif(
!stack.
isempty()
)return
true;}
}
時間複雜度:遍歷了一次字串長度為 n,o(n)
空間複雜度:定義了乙個棧和乙個字元型陣列,長度均為 n,o(n + n) = o(2n) = o(n)(常數不考慮在內)
20 有效的括號(棧)
判斷括號是否匹配,思路是 1 需要乙個輔助資料結構棧,將字串從第乙個字元開始逐個遍歷,如果該字元是左括號,如 則判斷該字元是否與棧頂的括號匹配。如果匹配,進入下一輪迴圈,即判斷下乙個字元。如果不匹配,直接退出函式,返回false,即無效括號。3 如果字串中每乙個字元都遍歷完了,最後看棧是否為空,如果...
有效括號匹配
給定乙個只包括 的字串,判斷字串是否有效。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。注意空字串可被認為是有效字串。示例 1 輸入 輸出 true 示例 2 輸入 輸出 true 示例 3 輸入 輸出 false 示例 4 輸入 輸出 false 示例 5 輸入 輸...
20 有效括號
1.題目描述 給定乙個只包括 的字串,判斷字串是否有效。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。2.示例 輸入 輸出 true輸入 輸出 false3.思路 可以採用棧來解決,第一步 判斷棧是否空,為空則進乙個括號,若不為空,則判斷當前括號和棧頂元素是否匹配,不...