小編給大家分享一下LeetCode如何判斷有效的括號,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
創(chuàng)新互聯(lián)建站主營裕安網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,重慶APP軟件開發(fā),裕安h5成都小程序開發(fā)搭建,裕安網(wǎng)站營銷推廣歡迎裕安等地區(qū)企業(yè)咨詢
給定一個只包括 '(',')','{','}','[',']' 的字符串 s ,判斷字符串是否有效。
有效字符串需滿足:
左括號必須用相同類型的右括號閉合。
左括號必須以正確的順序閉合。
輸入:s = "()"
輸出:true
輸入:s = "()[]{}"
輸出:true
輸入:s = "(]"
輸出:false
輸入:s = "([)]"
輸出:false
判斷括號的有效性可以使用「?!惯@一數(shù)據(jù)結(jié)構(gòu)來解決。
我們對給定的字符串 ss 進(jìn)行遍歷,當(dāng)我們遇到一個左括號時,我們會期望在后續(xù)的遍歷中,有一個相同類型的右括號將其閉合。由于后遇到的左括號要先閉合,因此我們可以將這個左括號放入棧頂。
當(dāng)我們遇到一個右括號時,我們需要將一個相同類型的左括號閉合。此時,我們可以取出棧頂?shù)淖罄ㄌ柌⑴袛嗨鼈兪欠袷窍嗤愋偷睦ㄌ?。如果不是相同的類型,或者棧中并沒有左括號,那么字符串 s 無效,返回 False。為了快速判斷括號的類型,我們可以使用哈希映射(HashMap)存儲每一種括號。哈希映射的鍵為右括號,值為相同類型的左括號。
在遍歷結(jié)束后,如果棧中沒有左括號,說明我們將字符串 s 中的所有左括號閉合,返回 True,否則返回 False。
注意到有效字符串的長度一定為偶數(shù),因此如果字符串的長度為奇數(shù),我們可以直接返回 False,省去后續(xù)的遍歷判斷過程。
class Solution:
def isValid(self, s: str) -> bool:
stack=[] #設(shè)置一個列表,把該列表當(dāng)做棧來使用即可。
dic={')':'(','}':'{',']':'['} #使用字典存儲括號,并且右括號為key,左括號為value
for char in s:
if char in dic.values(): #左括號就入棧
stack.append(char)
elif char in dic.keys(): #有右括號的話就進(jìn)行比較,
if stack==[] or dic[char] != stack.pop():
return False
else:
return False #不再字典中的輸入直接輸出錯誤
return stack==[]
class Solution {
public boolean isValid(String s) {
int len=s.length();
if(len%2==1){
return false;
}
Map map=new HashMap<>(){
{
put(')','(');
put(']','[');
put('}','{');
}
};
Stack stack=new Stack<>();
for(int i=0;i char ch=s.charAt(i);
if(map.containsKey(ch)){
if(stack.isEmpty() || stack.peek()!=map.get(ch)){
return false;
}
stack.pop();
}else{
stack.push(ch);
}
}
return stack.isEmpty();
}
}
以上是“LeetCode如何判斷有效的括號”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!