给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每个右括号都有一个对应的相同类型的左括号。
使用js可以使用栈(Stack)来解决该问题。
解题思路:
- 遍历字符串中的每一个字符
- 如果当前字符是左括号,则将其压入栈中
- 如果当前字符是右括号,则判断栈是否为空,如果为空则直接返回false,否则将栈顶元素弹出并判断是否与当前右括号匹配,如果不匹配则返回false
- 如果遍历完字符串后栈不为空,则返回false,否则返回true
可以使用以下代码实现:
const judgeStr = function (s) {
const len = s.length;
if (len % 2 !== 0 || len === 0) return false;
let stack = [];
for (let i = 0; i < s.length; i++) {
let c = s.charAt(i);
// 左括号的处理
if (c === "(" || c === "{" || c === "[") {
stack.push(c);
} else {
if (stack.length === 0) return false;
let top = stack.pop();
if (
// 这个地方注意下,左右括号不要写反了
(c === ")" && top !== "(") ||
(c === "]" && top !== "[") ||
(c === "}" && top !== "{")
) {
return false;
}
}
}
return stack.length === 0;
};