题目描述
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
示例 1:
输入:s = "()"
输出:true
示例 2:
输入:s = "()[]{}"
输出:true
示例 3:
输入:s = "(]"
输出:false
方法一
通过入栈、出栈的方式,判断是否两两对应
function validStr (str) {
// 长度为奇数直接返回
if (str.length % 2 === 1) {
return false;
}
const dic = {
'(': ')',
'{': '}',
'[': ']'
};
const result = [];
for (let i = 0; i < str.length; i++) {
const cur = str[i];
// 左括号入栈
if (cur === '(' || cur === '{' || cur === '[') {
result.push(cur);
} else {
// 左括号出栈
const left = result.pop();
// 右括号与左括号不配对
if (dic[left] !== cur) {
return false;
}
}
}
return !result.length;
}
方法二
通过遍历字符串,两个一次,判断是否两两对应
function validStr (str) {
if (str.length % 2 === 1) {
return false;
}
// 建立对应字典
const dic = {
'(': ')',
'{': '}',
'[': ']'
};
// 遍历字符串,一次遍历两个
for (let i = 0; i < strArr.length; i += 2) {
const left = str.charAt[i];
const right = str.charAt[i + 1];
if (right !== dic[left]) {
return false;
}
}
return true;
}