💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、豆包、星火、月之暗面及文生图、文生视频 广告
给定一个只包括`'('`,`')'`,`'{'`,`'}'`,`'['`,`']'` 的字符串,判断字符串是否有效。 有效字符串需满足: 1. 左括号必须用相同类型的右括号闭合。 2. 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。 **示例 1:** ~~~ 输入: "()" 输出: true ~~~ **示例 2:** ~~~ 输入: "()[]{}" 输出: true ~~~ **示例 3:** ~~~ 输入: "(]" 输出: false ~~~ **示例 4:** ~~~ 输入: "([)]" 输出: false ~~~ **示例 5:** ~~~ 输入: "{[]}" 输出: true ~~~ 思路一 括号包括括号内的括号都要是正常闭合的才可以 先取出最里面的闭合括号 () [] {},那么如此下去,一直保证最里面的括号内没其他括号的,都能正确闭合,则返回true 否则返回false 代码如下: ``` function isValid (s){ if (s.length % 2 != 0) return false; if (!s) return true; while (s.length) { var temp = s; s = s.replace('()', ''); s = s.replace('\[\]', ''); s = s.replace('{}', ''); if (s == temp) return false } return true; } ``` 思路二 从字符串最左边一次取出左括号,一直到碰到右括号位置,遵循栈的先进后厨原则来进行比对(碰到右括号,代表这个右括号要和最后取出的左括号相匹配才能返回true) ``` var isValid = function (s) { if (s.length % 2 != 0) return false; if (!s) return true; const obj = { "(": ")", "[": "]", "{": "}", }; const arr = []; for (let i = 0; i < s.length; i++) { if (obj[s[i]]) { arr.push(obj[s[i]]) } else if (s[i] === arr[arr.length - 1]) { arr.pop(); } } return !arr.length }; ```