小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
一、了解题目
附上原题链接:leetcode 20. 有效的括号
给定一个只包括 '(' , ')' , '{' , '}' , '[' , ']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
二、题解分析
这道题其实会用到两个知识点来解答,一个是栈,一个是字典。那么接下来我们来看下这道题的解题步骤,具体如下:
- 先判断字符串的个数是否为偶数,不是则直接返回;
- 建立一个字典,分别将三个括号映射进来;
- 遍历字符串。
三、代码实现
依据上面的题解,我们将用 js 来实现这道题。具体实现代码如下:
let isValid = function(s){
// 1. 判断字符串的个数是否为偶数,不是则直接返回
if(s.length % 2 === 1){
return false;
}
// 2.新建一个空栈
const stack = [];
// 3.新建一个字典,把三个对应的括号映射进入
const map = new Map();
map.set('(', ')');
map.set('{', '}');
map.set('[', ']');
// 4.循环字符串中的每一个括号字符
for(let i = 0; i < s.length; i++){
// 5. 定义一个变量c,来存放每一个字符的内容
const c = s[i];
// 6.先判断当前括号是否是左括号,如果是则把其一一丢进栈中
if(map.has(c)){
stack.push(c);
}
// 7. 如果遍历到的字符不是左括号的情况
else{
// 8. 获取栈中最后一个括号的值
const t = stack[stack.length - 1];
// 9. 用get方法去对应栈最后一个括号所对应的右括号,
// 并将其与当前所遍历的值进行匹对,查看是否相等,
// 如果相等则说明最后一个匹对成功,并将最后一个值从栈中弹出
if(map.get(t) === c){
stack.pop();
}
// 10. 如果并不相等则说明不是有效的括号,直接返回false
else{
return false;
}
}
}
// 11. 最终当全部匹配完成,且栈空时,才说明是有效的括号
return stack.length === 0;
}
console.log(isValid('[{()}]')); // true
console.log(isValid('[{)}')); // false
以上就是关于有效括号的的题解,不知道对小伙伴们是否有帮助呢?
我们下期见👋👋👋