本篇內(nèi)容介紹了“如何判斷LeetCode有效的括號(hào)”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
創(chuàng)新互聯(lián)建站長(zhǎng)期為千余家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為蘇州企業(yè)提供專業(yè)的成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作,蘇州網(wǎng)站改版等技術(shù)服務(wù)。擁有十余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
給定一個(gè)只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串 s
,判斷字符串是否有效
。
有效字符串
需滿足:
左括號(hào)
必須用相同類型
的右括號(hào)
閉合
左括號(hào)
必須以正確的順序
閉合
示例 1:
輸入:s = "()" 輸出:true
示例 2:
輸入:s = "()[]{}" 輸出:true
示例 3:
輸入:s = "(]" 輸出:false
示例 4:
輸入:s = "([)]" 輸出:false
示例 5:
輸入:s = "{[]}" 輸出:true
判斷有效括號(hào)的思路有哪些?
如果s字符串
的長(zhǎng)度為奇數(shù)
,則必不可能閉合,可以直接返回false
建立緩存映射,KEY
為左括號(hào),VALUE
為右括號(hào)
通過利用棧
先入
后出
的特性非常適合我們這題的思路,如果遇到左括號(hào)([({
)入棧,在進(jìn)行右括號(hào)(}])
)判斷時(shí)將對(duì)應(yīng)棧頂
左括號(hào)出棧,最后遍歷完棧內(nèi)數(shù)據(jù)
為空
class Solution { public boolean isValid(String s) { int length = s.length(); //奇數(shù)則不可能閉合 if(length%2==1){ return false; } //左括號(hào)與右括號(hào)的緩存映射 Mapmap = new HashMap<>(); map.put('(',')'); map.put('[',']'); map.put('{','}'); Stack stack = new Stack(); for(int i = 0 ; i < length ; i++){ char c = s.charAt(i); //是否為左括號(hào) if(map.containsKey(c)){ stack.push(c); }else{ //如果是右括號(hào),并且棧深為0,則說明當(dāng)前的字符串為右括號(hào)的字符串,可直接返回false,如 ')' '}' ']' '()())}]' if(stack.size()==0){ return false; } //彈出棧,并且從緩存中獲取,對(duì)應(yīng)的右括號(hào)與當(dāng)前字符串相匹配,是否相等,不相等則返回false if(!map.get(stack.pop()).equals(c)){ return false; } } } //最終判斷棧深度,為空則說明對(duì)撐 return stack.empty(); } }
時(shí)間復(fù)雜度:O(n)
,其中 n
是字符串 s
的長(zhǎng)度
執(zhí)行用時(shí):2
ms, 在所有 Java
提交中擊敗了76.91
%的用戶
內(nèi)存消耗:36.8
MB, 在所有 Java
提交中擊敗了25.12
%的用戶
我曾在銀色平原漫步,也曾在青草之河垂釣,這片土地認(rèn)識(shí)我,我們?nèi)舨粓?jiān)強(qiáng),就將滅亡
“如何判斷LeetCode有效的括號(hào)”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!