题目描述
有效的括号
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: "()"
输出: true
示例 2:
输入: "()[]{}"
输出: true
示例 3:
输入: "(]"
输出: false
示例 4:
输入: "([)]"
输出: false
示例 5:
输入: "{[]}"
输出: true
来源:力扣(LeetCode)
链接:https:
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路
stack 栈先进后出
- 定义一个map对象,将左括号作为key值,右括号作为value值;
- 利用栈先进后出的原则;定义栈stack;
- 遍历括号字符串s;
- 如果是左括号则将map中对应的右括号入栈;
- 否则,遇到右括号,判断当前遍历的右括号是否和栈顶元素相等;
- 遍历结束,判断栈stack是否为空;
代码
let map: any = {
'{' : '}',
'(' : ')',
'[' : ']'
}
function isValid(s: string): boolean {
let stack: string[] = [];
let top: string | undefined;
for(let char of s){
let value;
if((value = map[char])){
stack.push(value);
}else{
top = stack.pop();
if(top !== char){
return false;
}
}
}
return !stack.length;
}