題目:
給定一個只包括 '(',')','{','}','[',']' 的字符串,判斷字符串是否有效。
有效字符串需滿足:
左括號必須用相同類型的右括號閉合。
左括號必須以正確的順序閉合。
注意空字符串可被認為是有效字符串。
/** * @param {string} s * @return {boolean} */ var isValid = function(s) { if(s==" "||s==""){ return true; } let stack = []; let left = ["{","(","["]; let right = ["}",")","]"]; for(let i =0;i<s.length;i++){ if(left.indexOf(s[i])>-1){ stack.push(s[i]); }else if(s[i] === " "){ continue; }else{ if(stack.pop() != left[right.indexOf(s[i])] ){ return false; } } } if(stack.length!=0){ return false; } return true; };
這里主要是使用了棧的先進后出的特點,遍歷s字符串,當遇到左括號的時候就將左括號進棧,當遇到右括號的時候,就檢測當前棧頂的元素是否是匹配的右括號的左括號(或則是說當前棧頂的左括號是否與遍歷到的右括號匹配),匹配的話就在進行循環,不匹配的話就直接返回false,因為會出現(]或則是(}這樣的情況,這是不允許的。
看到一個思路很厲害的人的代碼:直接匹配的元素用""代替,最后判斷一下是否是”“即可。
class Solution: def isValid(self, s): while '{}' in s or '()' in s or '[]' in s: s = s.replace('{}', '') s = s.replace('[]', '') s = s.replace('()', '') return s == ''
//來源:https://leetcode-cn.com/u/wings-kbftq3byhh
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/valid-parentheses
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。