var isValid = function (s) { const map = { ")": "(", "]": "[", "}": "{", };
let stack = []; for (let i = 0; i < s.length; i++) { let c = s[i]; if (map[c] !== undefined) { let topElement = stack.length ? stack.pop() : ""; if (topElement !== map[c]) { returnfalse; } } else { stack.push(c); } }
return stack.length === 0; };
解法二
用数字的 ++ 和 --模拟栈的操作,因为无需删除数组元素使其操作更快。有个细节注意下 top = 1;,从而省去了之后判空的操作和 top - 1 导致数组越界的错误。
var isValid = function (s) { const map = { ")": "(", "]": "[", "}": "{", };
let top = 1; let stack = newArray(s.length + top); for (let i = 0; i < s.length; i++) { let c = s[i]; if (map[c] !== undefined) { let topElement = stack[--top]; if (topElement !== map[c]) { returnfalse; } } else { stack[top++] = c; } }
var isValid = function (s) { while (s.length) { let temp = s; s = s.replace(/\(\)/g, ""); s = s.replace(/\[\]/g, ""); s = s.replace(/\{\}/g, ""); if (s === temp) returnfalse; }