A string S consisting of N characters is considered to be properly nested if any of the following conditions is true:
Write a function:
function solution(S);
that, given a string S consisting of N characters, returns 1 if S is properly nested and 0 otherwise.
For example, given S = “{[()()]}”, the function should return 1 and given S = “([)()]”, the function should return 0, as explained above.
Write an efficient algorithm for the following assumptions:
function solution(S) {
let stack = [];
for (let i = 0; i < S.length; i++) {
switch (S[i]) {
case '{':
stack.push('{');
break;
case '[':
stack.push('[');
break;
case '(':
stack.push('(');
break;
case '}':
if (stack[stack.length - 1] !== '{') {
return 0;
} else {
stack.pop();
}
break;
case ']':
if (stack[stack.length - 1] !== '[') {
return 0;
} else {
stack.pop();
}
break;
case ')':
if (stack[stack.length - 1] !== '(') {
return 0;
} else {
stack.pop();
}
break;
}
}
return 1;
}
function solution(S) {
if (S.length % 2 !== 0) return 0;
const brackets = {
'}': '{',
']': '[',
')': '(',
};
let stack = [];
for (let i = 0; i < S.length; i++) {
if (S[i] === '{' || S[i] === '[' || S[i] === '(') {
stack.push(S[i]);
}
if (S[i] === '}' || S[i] === ']' || S[i] === ')') {
if (stack[stack.length - 1] !== brackets[S[i]]) {
return 0;
} else {
stack.pop();
}
}
}
return stack.length ? 0 : 1;
}