描述:
有效字符为: ‘【】’ 或‘([{}]){}’
无效字符’[}’ 或【{]}’
解决方案如下:
方式一: 遍历整个字符串,若前一项与后一项可以配对,则将此对从原字符串中删除。
let s = '{}[]{{]}'
function fn(s) {
if (s.length % 2 !== 0) return false
s = s.split('')
for (let i = 0; i < s.length - 1; i++) {
let pre = s[i],next = s[i+1]
if (pre ==='{' && next === '}' || pre === '(' && next === ')' ||
pre === '['&& next === ']') {
s.splice(i,2);
i = i - 2;
}
}
return s.length ? false : true
}
方式二:(将左括号入栈,每次取栈顶元素与右括弧匹配,直到栈为空,加入到最后栈还有值,则说明字符串无效)
// 方式二
function fn2(s) {
if ( s && s.length % 2 !== 0) return false
let statck = []
for (let i = 0; i < s.length; i++){
if(statck.length && s[i] == ')' || s[i] == '}' || s[i] == ']') {
let item = statck[statck.length - 1] // 拿到栈顶元素;
if (item == '(' && s[i] == ')' || item == '{' && s[i] == '}' || item == '[' && s[i] == ']') {
statck.pop();
}
continue;
}
statck.push(s[i])
}
return statck.length ? false : true
}