【前端算法指南】20. 有效的括號(棧)
題目描述
給定一個只包括'(',')','{','}','[',']'的字符串,判斷字符串是否有效。
有效字符串需滿足:
左括號必須用相同類型的右括號閉合。左括號必須以正確的順序閉合。注意空字符串可被認(rèn)為是有效字符串。
示例 1:
輸入: "()"
輸出: true
示例 2:
輸入: "()[]{}"
輸出: true
示例 3:
輸入: "(]"
輸出: false
示例 4:
輸入: "([)]"
輸出: false
示例 5:
輸入: "{[]}"
輸出: true
題解
發(fā)現(xiàn)越靠后的左括號,最先匹配,也就是后進(jìn)先出的思想,于是考慮使用棧這個數(shù)據(jù)結(jié)構(gòu)。
/**
* @param {string} s
* @return {boolean}
*/
var isValid = function(s) {
// 如果是奇數(shù),不可能匹配成功,直接返回false
if(s.length & 1) return false
let stack = []
for(let i=0;i<s.length;i++){
if(s[i] === '(' || s[i] === '{' || s[i] === '[') stack.push(s[i])
else if(s[i] === ')' && stack[stack.length-1] === '(') stack.pop()
else if(s[i] === '}' && stack[stack.length-1] === '{') stack.pop()
else if(s[i] === ']' && stack[stack.length-1] === '[') stack.pop()
else return false
}
return !stack.length
};
小獅子初心
最近收到了很多小伙伴的關(guān)注,在此非常感謝各位的支持。
大廠面試記錄已經(jīng)更新完畢了,接下來開始更新算法、常見面試題等相關(guān)了,喜歡的小伙伴可以關(guān)注一波,秋招也快開始了,小獅子也創(chuàng)建了一個交流|內(nèi)推群,可以后臺回復(fù) 【交流】拉你進(jìn)群哈~
希望可以匯聚一些熱愛學(xué)習(xí)的人,可以答疑解惑,摸摸魚都行,有任何問題要勇敢提出來,不要覺得提出問題很 低級 或沒人回答就冷場了,小獅子會來救場~
另外,可能關(guān)注我的很多都是學(xué)弟學(xué)妹們(大二大三會比較多一點(diǎn)),也許大家在學(xué)前端的時(shí)候會有迷茫,沒有方法或者學(xué)習(xí)路線,甚至對未來都會迷茫,大家一起交流溝通~
在畢業(yè)季我寫了一份我大學(xué)四年的總結(jié):2021 上半年階段總結(jié),致大學(xué)江湖的青蔥歲月,通過踩坑反思自己,雖然潦潦草草,但也算是略有一點(diǎn)文采,收到許多朋友的支持,希望能夠幫助大家。
如果出現(xiàn)以上問題都可以找我,我很能理解你們的想法,因?yàn)楫?dāng)時(shí)我也有遇到過,現(xiàn)在希望能幫大家少踩點(diǎn)坑,幫助大家我也會很開心。
我是一位獅子座的前端博主,希望能在這里給予你一些幫助,歡迎加入小獅子前端~
