parent
3e530e3f61
commit
2acede34b6
|
@ -0,0 +1,21 @@
|
|||
# Exercise 13 - Balanced Parenthesis
|
||||
|
||||
Write a JavaScript function that takes a string as input and returns true if it contains a balanced set of parentheses and false otherwise. The function should, for example, return true for the following strings:
|
||||
|
||||
- "()"
|
||||
- "{()}"
|
||||
- "()[]"
|
||||
|
||||
and return false for following string:
|
||||
|
||||
- "(()"
|
||||
- "{}}}"
|
||||
- "[(])}"
|
||||
|
||||
## Hint:
|
||||
|
||||
To solve this problem, you can use a stack data structure to keep track of when parenthesis open and close.
|
||||
|
||||
- Each opening parenthesis in the string is pushed onto the stack by looping through it.
|
||||
- If you encounter a closing parenthesis, take the top element from the stack and see if it matches. Continue iterating over the string if they match. Return false if they do not match.
|
||||
- If the stack is empty at the end of the loop, return true; otherwise, return false.
|
|
@ -0,0 +1,8 @@
|
|||
function balancedParenthesis(str){
|
||||
//code here
|
||||
|
||||
}
|
||||
|
||||
|
||||
//do not delete below this line
|
||||
module.exports = balancedParenthesis;
|
|
@ -0,0 +1,33 @@
|
|||
const balancedParenthesis = require('./balancedParenthesis');
|
||||
|
||||
describe("balanced parenthesis", () => {
|
||||
|
||||
test("(()) is return true", () => {
|
||||
expect(balancedParenthesis("(())")).toBe(true);
|
||||
});
|
||||
test.skip("empty string is true", () => {
|
||||
expect(balancedParenthesis("")).toBe(true);
|
||||
});
|
||||
test.skip("()) is return false", () => {
|
||||
expect(balancedParenthesis("())")).toBe(false);
|
||||
});
|
||||
test.skip("{[()]} is return true", () => {
|
||||
expect(balancedParenthesis("{[()]}")).toBe(true);
|
||||
});
|
||||
test.skip("{[()]}( is return false", () => {
|
||||
expect(balancedParenthesis("{[()]}(")).toBe(false);
|
||||
});
|
||||
test.skip("((((((( is return false", () => {
|
||||
expect(balancedParenthesis("(((((((")).toBe(false);
|
||||
});
|
||||
test.skip("()[]{} is return true", () => {
|
||||
expect(balancedParenthesis("()[]{}")).toBe(true);
|
||||
});
|
||||
test.skip("([{}]) is return true", () => {
|
||||
expect(balancedParenthesis("([{}])")).toBe(true);
|
||||
});
|
||||
test.skip("{{{{}}}}()() is return true", () => {
|
||||
expect(balancedParenthesis("{{{{}}}}()()")).toBe(true);
|
||||
});
|
||||
|
||||
})
|
|
@ -0,0 +1,32 @@
|
|||
function balancedParenthesis(str){
|
||||
const stack = [];
|
||||
const openP = {
|
||||
"(" : ")",
|
||||
"[" : "]",
|
||||
"{" : "}"
|
||||
};
|
||||
const closeP = {
|
||||
")" : true,
|
||||
"]" : true,
|
||||
"}" : true
|
||||
};
|
||||
|
||||
for (let i = 0; i < str.length; i++){
|
||||
const char = str[i];
|
||||
|
||||
if (openP[char]){
|
||||
stack.push(char);
|
||||
}
|
||||
else if (closeP[char]){
|
||||
const pop = stack.pop();
|
||||
|
||||
if (!pop || openP[pop] != char){
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return stack.length == 0 ? true : false;
|
||||
}
|
||||
|
||||
module.exports = balancedParenthesis;
|
|
@ -0,0 +1,33 @@
|
|||
const balancedParenthesis = require('./balancedParenthesis-solution');
|
||||
|
||||
describe("balanced parenthesis", () => {
|
||||
|
||||
test("(()) is return true", () => {
|
||||
expect(balancedParenthesis("(())")).toBe(true);
|
||||
});
|
||||
test("empty string is true", () => {
|
||||
expect(balancedParenthesis("")).toBe(true);
|
||||
});
|
||||
test("()) is return false", () => {
|
||||
expect(balancedParenthesis("())")).toBe(false);
|
||||
});
|
||||
test("{[()]} is return true", () => {
|
||||
expect(balancedParenthesis("{[()]}")).toBe(true);
|
||||
});
|
||||
test("{[()]}( is return false", () => {
|
||||
expect(balancedParenthesis("{[()]}(")).toBe(false);
|
||||
});
|
||||
test("((((((( is return false", () => {
|
||||
expect(balancedParenthesis("(((((((")).toBe(false);
|
||||
});
|
||||
test("()[]{} is return true", () => {
|
||||
expect(balancedParenthesis("()[]{}")).toBe(true);
|
||||
});
|
||||
test("([{}]) is return true", () => {
|
||||
expect(balancedParenthesis("([{}])")).toBe(true);
|
||||
});
|
||||
test("{{{{}}}}()() is return true", () => {
|
||||
expect(balancedParenthesis("{{{{}}}}()()")).toBe(true);
|
||||
});
|
||||
|
||||
})
|
Loading…
Reference in New Issue