给定一个只包括 ‘(‘,’)’,’{‘,’}’,’[‘,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号。
示例 1:
输入:s = “()”
输出:true
示例 2:
输入:s = “()[]{}”
输出:true
示例 3:
输入:s = “(]”
输出:false
提示:
- 1 <= s.length <= $10^4$
- s 仅由括号 ‘()[]{}’ 组成
解析
方法 1: 用栈来解决,左括号入栈,右括号出栈,且出栈元素需要跟当前元素是一对。
最后栈为空。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
var isValid = function (s) { const leftBrackets = { "(": ")", "{": "}", "[": "]", }; const stack = [];
for (let i = 0; i < s.length; i++) { const current = s[i];
if (leftBrackets[current]) { stack.push(current); } else { const last = stack[stack.length - 1]; if (current === leftBrackets[last]) { stack.pop(); } else { return false; } } } return stack.length === 0; };
|
方法 2: 使用替代元素法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
var isValid = function (s) { const brackets = ["()", "{}", "[]"];
while (true) { const len = s.length; s = s.replace("()", ""); s = s.replace("{}", ""); s = s.replace("[]", ""); if (s.length === len) { break; } } return s.length === 0; };
|