「这是我参与2022首次更文挑战的第7天,活动详情查看:2022首次更文挑战」。
前言
最近参加了2022年三月份的蓝桥杯比赛,所以计划学习算法和数据结构相关知识,但是平时都是学习不持续,所以希望借此机会来学习此知识点。因为我是在校大三学生,所以后续的算法相关代码都是使用js语言来进行完成。本文更新的是leetcode算法题之--有效的括号。
题目
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
示例
题解
/**
* @param {string} s
* @return {boolean}
*/
var isValid = function(s) {
const stack = [];
for (let i = 0; i < s.length; i++) {
let c = s[i];
switch (c) {
case '(':
stack.push(')');
break;
case '[':
stack.push(']');
break;
case '{':
stack.push('}');
break;
default:
if (c !== stack.pop()) {
return false;
}
}
}
return stack.length === 0;
};
分析
将左括号看作待匹配的元素,将右括号看作去和左括号匹配的元素。 扫描字符串:
- 遇到左括号,就入栈待匹配。
- 遇到右括号,试图与栈顶的左括号进行匹配:
- 如果栈空了,说明有右括号是多余的。
- 如果匹配,则栈顶带匹配的做括号得的匹配,出栈。
- 如果不匹配,则栈顶的左括号的右边是一个和它不匹配的右括号,说明这个字符串是无效的。
- 如果字符串扫描结束后,栈不为空,则有左括号是多余的 利用swithch -case语句,然后栈来进行循环输出。