题目
20. 有效的括号
给定一个只包括 ‘(‘,’)’,'{‘,’}’,'[‘,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
示例 1:
输入:s = “()”
输出:true
示例 2:
输入:s = “()[]{}”
输出:true
示例 3:
输入:s = “(]”
输出:false
示例 4:
输入:s = “([])”
输出:true
示例 5:
输入:s = “([)]”
输出:false
提示:
- 1 <= s.length <= 104
- s 仅由括号 ‘()[]{}’ 组成
我的代码(Python)
/**
* @param {string} s
* @return {boolean}
*/
var isValid = function(s) {
if (s.length % 2 != 0) {
return false;
}
if (s.length == 0) {
return true;
}
let myStack = [];
for (const [i, ch] of [...s].entries()) {
if (ch == '(' || ch == '[' || ch == '{') {
myStack.push(ch);
if (s.length - i - 1 < myStack.length) {
return false;
}
} else {
if (myStack.length == 0) {
return false;
}
switch (ch) {
case ')':
if (myStack[myStack.length - 1] != '(') {
return false;
}
myStack.pop();
break;
case ']':
if (myStack[myStack.length - 1] != '[') {
return false;
}
myStack.pop();
break;
case '}':
if (myStack[myStack.length - 1] != '{') {
return false;
}
myStack.pop();
break;
default:
return false;
break;
}
}
}
return myStack.length == 0;
};
点评
思路很简单,出栈入栈顺序判定。
但是效率不好。
官方的解法是通过做了一个map来优化比较过程,考虑到每一个都是要比较的,确实可以优化很多。
baddif@gmail.com
AI简历优化站
AI求职跟踪器(建设中)
主站(建设中)
相关平台
Github Issues / Notion / Blog
That’s a fascinating point about evolving game narratives! It’s amazing how quickly tech like Sora 2 Video Generator is changing content creation, potentially impacting even game cutscenes & storytelling. Accessible tools are key!