Given a string containing just the characters '('
, ')'
, '{'
, '}'
, '['
and ']'
, determine if the input string is valid.
The brackets must close in the correct order, "()"
and "()[]{}"
are all valid but "(]"
and "([)]"
are not.
Subscribe to see which companies asked this question
/**
* @param {string} s
* @return {boolean}
*/
var isValid = function(s) {
var stack = [];
stackPointer = 0;
for(var i = 0; i < s.length; i++) {
switch(s[i]) {
case '{':
stack[stackPointer] = s[i];
stackPointer++;
break;
case '}':
if(stack[stackPointer-1] === '{') {
stackPointer--;
} else {
return false;
}
break;
case '[':
stack[stackPointer] = s[i];
stackPointer++;
break;
case ']':
if(stack[stackPointer-1] === '[') {
stackPointer--;
} else {
return false;
}
break;
case '(':
stack[stackPointer] = s[i];
stackPointer++;
break;
case ')':
if(stack[stackPointer-1] === '(') {
stackPointer--;
} else {
return false;
}
break;
default:
continue;
}
}
if(stackPointer === 0) {
return true;
} else {
return false;
}
};
试着缩短了代码
/**
* @param {string} s
* @return {boolean}
*/
var isValid = function(s) {
var stack = [];
stackPointer = 0;
for(var i = 0; i < s.length; i++) {
switch(s[i]) {
case '{':
case '[':
case '(':
stack[stackPointer++] = s[i];
break;
case '}':
if(stackPointer === 0 || stack[--stackPointer] !== '{' )
return false;
break;
case ']':
if(stackPointer === 0 || stack[--stackPointer] !== '[' )
return false;
break;
case ')':
if(stackPointer === 0 || stack[--stackPointer] !== '(' )
return false;
break;
default:
continue;
}
}
return stackPointer === 0;
};