思路:利用栈的特性来做,创建键为左括号值为右括号的字典
如果当前遍历字符在字典中,压栈,则可确定栈中都是左括号
如果不在字典中,即为右括号,则判断字典中键为栈顶元素的值是否为当前遍历字符,不符合则返回false
边界问题:如果栈空,弹栈会报错,因此,我们采用一个取巧方法给stack赋初值?,并在字典中建立?的索引,
当栈为空且字符为空右括号时,disc[stack.pop()]为’?',即可正确处理
若遍历完后栈中有左括号,则说明不完全成对,对此判断栈长度==1
var isValid = function(s) {
let disc = {'{':'}', '(':')', '[':']', '?':'?'};
let stack = ['?'];
for(let c of s){
if(disc[c]) stack.push(c);
else if(disc[stack.pop()] !== c) return false;
}
return stack.length === 1;
}
文章描述了一种利用栈的特性解决字符串中括号配对有效性的算法,通过创建一个字典和栈来判断输入字符串s中的括号是否完全成对。遇到右括号时,检查栈顶元素的左括号是否匹配,若不匹配则返回false。同时考虑了边界条件,确保栈空时的正确处理。
1503





