描述
给出一个仅包含字符’(‘,’)‘,’{‘,’}‘,’[‘和’]',的字符串,判断给出的字符串是否是合法的括号序列
括号必须以正确的顺序关闭,"()“和”()[]{}“都是合法的括号序列,但”(]“和”([)]"不合法。
数据范围:字符串长度 0\le n \le 100000≤n≤10000
要求:空间复杂度 O(n)O(n),时间复杂度 O(n)O(n);
思路: 给到的是一个字符串,判断是否按照正确的方式关闭。就是左边的要对应右边的 ( , [ ,{,}, ],),如果是相互包裹的里面也应该是闭合的。方法: 遍历整个字符串,依次判断字符是不是我们需要的,如果是就追加到数组里。如果不是就从数组取出最后一个,对比是否是对应的闭合字符,如果是就把temp变量设为true;如果不是就是直接return;
代码:
function isValid( s ) {
// write code here
let Arr = [];
let temp = false;
if(s.length % 2 !== 0) return false;
for(let i = 0; i < s.length; i++){
if(s[i] === '('){
Arr.push(s[i]);
} else if(s[i] === '['){
Arr.push(s[i]);
} else if(s[i] === '{'){
Arr.push(s[i]);
} else {
let str = Arr.pop();
if (str === '(' && s[i] === ')'){
temp = true;
} else if ( str === '[' && s[i] === ']'){
temp = true;
} else if ( str === '{' && s[i] === '}'){
temp = true;
} else {
return false;
}
}
};
return temp;
}