您好,登錄后才能下訂單哦!
小編給大家分享一下LeetCode如何判斷有效的括號,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
給定一個只包括 '(',')','{','}','[',']' 的字符串 s ,判斷字符串是否有效。
有效字符串需滿足:
左括號必須用相同類型的右括號閉合。
左括號必須以正確的順序閉合。
輸入:s = "()"
輸出:true
輸入:s = "()[]{}"
輸出:true
輸入:s = "(]"
輸出:false
輸入:s = "([)]"
輸出:false
判斷括號的有效性可以使用「棧」這一數據結構來解決。
我們對給定的字符串 ss 進行遍歷,當我們遇到一個左括號時,我們會期望在后續的遍歷中,有一個相同類型的右括號將其閉合。由于后遇到的左括號要先閉合,因此我們可以將這個左括號放入棧頂。
當我們遇到一個右括號時,我們需要將一個相同類型的左括號閉合。此時,我們可以取出棧頂的左括號并判斷它們是否是相同類型的括號。如果不是相同的類型,或者棧中并沒有左括號,那么字符串 s 無效,返回 False。為了快速判斷括號的類型,我們可以使用哈希映射(HashMap)存儲每一種括號。哈希映射的鍵為右括號,值為相同類型的左括號。
在遍歷結束后,如果棧中沒有左括號,說明我們將字符串 s 中的所有左括號閉合,返回 True,否則返回 False。
注意到有效字符串的長度一定為偶數,因此如果字符串的長度為奇數,我們可以直接返回 False,省去后續的遍歷判斷過程。
class Solution:
def isValid(self, s: str) -> bool:
stack=[] #設置一個列表,把該列表當做棧來使用即可。
dic={')':'(','}':'{',']':'['} #使用字典存儲括號,并且右括號為key,左括號為value
for char in s:
if char in dic.values(): #左括號就入棧
stack.append(char)
elif char in dic.keys(): #有右括號的話就進行比較,
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<Character,Character> map=new HashMap<>(){
{
put(')','(');
put(']','[');
put('}','{');
}
};
Stack<Character> stack=new Stack<>();
for(int i=0;i<len;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如何判斷有效的括號”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。