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