题目:
题目截图:
解题步骤:
1.新建一个栈
2.扫描字符串,遇左括号入栈,遇到和栈顶括号类型匹配的右括号就出栈,
类型不匹配直接判定为不合法
3.最后栈空了就合法,否则不合法
代码:
// 第一种方式
var isValid = function (s) {
if (s.length % 2 === 1) return false; // 字符串的长度是奇数
const stack = [];
for (let i = 0; i < s.length; i++) {
const c = s[i];
if (c === '(' || c === '[' || c === '{') {
stack.push(c);
} else {
const t = stack[stack.length - 1];
if (
(t === '(' && c === ')') ||
(t === '[' && c === ']') ||
(t === '{' && c === '}')
) {
stack.pop();
} else {
return false;
}
}
}
return stack.length === 0;
};
// 第二种方式,使用字典进行简化
var isValid = function (s) {
if (s.length % 2 === 1) return false;
const stack = [];
const map = new Map();
map.set('(', ')');
map.set('{', '}');
map.set('[', ']');
for (let i = 0; i < s.length; i++) {
const c = s[i];
if (map.has(c)) {
stack.push(c);
} else {
const t = stack[stack.length - 1];
if (map.get(t) === c) {
stack.pop();
} else {
return false;
}
}
}
return stack.length === 0;
};
时间复杂度分析:
时间复杂度是O(n),n是s的长度
空间复杂度分析:
空间复杂度是O(n),n是s的长度,因为最坏的情况就是全是左括号
怎么样,是不是很简单,你学会了吗?
如果这篇文章能够帮助到您,希望您不要吝惜点赞👍👍和收藏💖💖,您的支持是我继续努力的动力 💪💪!!!