From e8aa9773dce5df14d4175d517b8eadbc6108a230 Mon Sep 17 00:00:00 2001 From: Haysel Santiago Date: Tue, 13 Mar 2018 08:42:32 -0400 Subject: [PATCH 1/2] Part 1, 2 & Tests Passing --- pom.xml | 12 +++ src/main/java/io/zipcoder/ParenChecker.java | 88 +++++++++++++++++++ .../java/io/zipcoder/ParenCheckerTest.java | 59 ++++++++++++- 3 files changed, 158 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index e66b725..5c3991d 100644 --- a/pom.xml +++ b/pom.xml @@ -7,6 +7,18 @@ io.zipcoder collections 1.0-SNAPSHOT + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.7 + 1.7 + + + + diff --git a/src/main/java/io/zipcoder/ParenChecker.java b/src/main/java/io/zipcoder/ParenChecker.java index caee675..2f6e6d2 100644 --- a/src/main/java/io/zipcoder/ParenChecker.java +++ b/src/main/java/io/zipcoder/ParenChecker.java @@ -1,4 +1,92 @@ package io.zipcoder; +//import java.util.HashMap; +//import java.util.Map; +import java.util.Stack; + public class ParenChecker { + + Stack parenStack = new Stack(); + + //going to pass in the chars we are looking for contained within a String '' + public boolean parenChecker(String string) { + for(int i = 0; i < string.length(); i++) { + if(string.charAt(i) == ')' && parenStack.empty()){ + break; + } + if (string.charAt(i) == '(') { + parenStack.push(string.charAt(i)); + } + if(string.charAt(i) ==')'){ + parenStack.pop(); + } + } + return parenStack.empty(); + } + + public boolean pairOfParenthesies(String string) { + for (int i =0; i < string.length(); i++) { + char currentCharacter = string.charAt(i); + if (currentCharacter == '[' || currentCharacter == '"' || currentCharacter == '<' || currentCharacter == '\'' || currentCharacter == '{') { + parenStack.push(currentCharacter); + } + if (currentCharacter == ']' || currentCharacter == '"' || currentCharacter == '>' || currentCharacter == '\'' || currentCharacter == '}' ) { + if (parenStack.isEmpty()) { + return false; + } + // look at the object at the top of the stack but don't remove, PEEK + char finalCharacter = parenStack.peek(); + if (currentCharacter == ']' && finalCharacter == '[' || currentCharacter == '"' && finalCharacter == '"' || currentCharacter == '<' && finalCharacter =='>' || currentCharacter == '\'' && finalCharacter == '\'' || currentCharacter == '}' && finalCharacter == '{') { + parenStack.pop(); + } + } + } + return parenStack.isEmpty(); + } } + + //check if characters are balanced// +// +// private static boolean isBalanced(String str) { +// Map bracketPairs = new HashMap(){ +// { +// put('(', ')'); +// put('{', '}'); +// put('[', ']'); +// put('<', '>'); +// } +// }; +// +// //in order to be balanced, there ought to be an even number of chars +// if(str.length() % 2 !=0) { +// return false; +// } +// //stores opening braces in this case +// Stack halfBraces = new Stack<>(); +// +// for(int i = 0; i < str.length(); i++) { +// //if characters (bracket) is opening, then store into stack +// if(bracketPairs.containsKey(str.charAt(i))){ +// halfBraces.push(str.charAt(i)); +// } +// +// //if closing bracket is not equal to top of stack or if stack is empty, return false +// else if(halfBraces.isEmpty() || bracketPairs.get(halfBraces.pop()) !=str.charAt(i)) { +// return false; +// } +// } +// return halfBraces.isEmpty() ? true : false; +// } +// +//} + + +// public static boolean checkParenthesies(String input) { +// Stack stack = new Stack(); +// for (int i = 0; i < input.length(); i++) { +// char c = input.charAt(i); +// if (c == '[' || c == '(' || c == '{') { +// stack.push(c); +// } +// } +// } diff --git a/src/test/java/io/zipcoder/ParenCheckerTest.java b/src/test/java/io/zipcoder/ParenCheckerTest.java index 76aa3b6..5d874ca 100644 --- a/src/test/java/io/zipcoder/ParenCheckerTest.java +++ b/src/test/java/io/zipcoder/ParenCheckerTest.java @@ -3,6 +3,63 @@ import org.junit.Assert; import org.junit.Test; +import java.util.Stack; + + public class ParenCheckerTest { -} \ No newline at end of file + @Test + public void parenthesisCheckerTest() { + //Given + ParenChecker parenthesisTest = new ParenChecker(); + + //When + String testString = "()"; + boolean actual = parenthesisTest.parenChecker(testString); + + //Then + Assert.assertTrue(actual); + } + + @Test + public void parenthesisCheckerTest2() { + //Given + ParenChecker parenthesisTest = new ParenChecker(); + + //When + String testString = "("; + boolean actual = parenthesisTest.parenChecker(testString); + + //Then + Assert.assertFalse(actual); + } + + @Test + public void parenthesisCheckerTest3() { + //Given + ParenChecker parenthesisTest = new ParenChecker(); + + //When + String testString2 = "()<>"; + boolean actual = parenthesisTest.pairOfParenthesies(testString2); + + //Then + Assert.assertFalse(actual); + } + + @Test + public void parenthesisCheckerTest4() { + //Given + ParenChecker parenthesisTest = new ParenChecker(); + + //When + String testString = "()<>''"; + boolean actual = parenthesisTest.pairOfParenthesies(testString); + + //Then + Assert.assertFalse(actual); + } +} +// Single ( +// more than one set () <> +// more than two sets () <> '' \ No newline at end of file From 6993526ac83d4ec1be911ce71831fded16fef24f Mon Sep 17 00:00:00 2001 From: Haysel Santiago Date: Tue, 13 Mar 2018 11:43:45 -0400 Subject: [PATCH 2/2] Added more tests and refactored faulty code --- src/main/java/io/zipcoder/ParenChecker.java | 36 ++++++---- .../java/io/zipcoder/ParenCheckerTest.java | 71 ++++++++++++++++--- 2 files changed, 83 insertions(+), 24 deletions(-) diff --git a/src/main/java/io/zipcoder/ParenChecker.java b/src/main/java/io/zipcoder/ParenChecker.java index 2f6e6d2..60891d5 100644 --- a/src/main/java/io/zipcoder/ParenChecker.java +++ b/src/main/java/io/zipcoder/ParenChecker.java @@ -10,35 +10,43 @@ public class ParenChecker { //going to pass in the chars we are looking for contained within a String '' public boolean parenChecker(String string) { - for(int i = 0; i < string.length(); i++) { - if(string.charAt(i) == ')' && parenStack.empty()){ - break; + for (int i = 0; i < string.length(); i++) { + char charCurrent = string.charAt(i); + if (charCurrent == '(') { + parenStack.push(charCurrent); } - if (string.charAt(i) == '(') { - parenStack.push(string.charAt(i)); - } - if(string.charAt(i) ==')'){ - parenStack.pop(); + if (charCurrent == ')') { //if stack's empty, no existing pair for it to link to. + if (parenStack.isEmpty()) + return false; + + char charOnStack = parenStack.peek(); + if (charCurrent == ')' && charOnStack == '(') { + parenStack.pop(); + } else + return false; } } return parenStack.empty(); } public boolean pairOfParenthesies(String string) { + Stack parenStack = new Stack(); for (int i =0; i < string.length(); i++) { char currentCharacter = string.charAt(i); - if (currentCharacter == '[' || currentCharacter == '"' || currentCharacter == '<' || currentCharacter == '\'' || currentCharacter == '{') { + if (currentCharacter == '[' || currentCharacter == '"' || currentCharacter == '<' || currentCharacter == '\'' || currentCharacter == '{' || currentCharacter == '(') { parenStack.push(currentCharacter); } - if (currentCharacter == ']' || currentCharacter == '"' || currentCharacter == '>' || currentCharacter == '\'' || currentCharacter == '}' ) { - if (parenStack.isEmpty()) { + if (currentCharacter == ']' || currentCharacter == '"' || currentCharacter == '>' || currentCharacter == '\'' || currentCharacter == '}' || currentCharacter == ')' ) { + + if (parenStack.isEmpty()) return false; - } // look at the object at the top of the stack but don't remove, PEEK char finalCharacter = parenStack.peek(); - if (currentCharacter == ']' && finalCharacter == '[' || currentCharacter == '"' && finalCharacter == '"' || currentCharacter == '<' && finalCharacter =='>' || currentCharacter == '\'' && finalCharacter == '\'' || currentCharacter == '}' && finalCharacter == '{') { + if (currentCharacter == ']' && finalCharacter == '[' || currentCharacter == '"' && finalCharacter == '"' + || currentCharacter == '>' && finalCharacter =='<' || currentCharacter == '\'' && finalCharacter == '\'' || currentCharacter == '}' && finalCharacter == '{' || currentCharacter == ')' && finalCharacter == '(') { parenStack.pop(); - } + } else + return false; } } return parenStack.isEmpty(); diff --git a/src/test/java/io/zipcoder/ParenCheckerTest.java b/src/test/java/io/zipcoder/ParenCheckerTest.java index 5d874ca..c2c1598 100644 --- a/src/test/java/io/zipcoder/ParenCheckerTest.java +++ b/src/test/java/io/zipcoder/ParenCheckerTest.java @@ -27,21 +27,20 @@ public void parenthesisCheckerTest2() { ParenChecker parenthesisTest = new ParenChecker(); //When - String testString = "("; - boolean actual = parenthesisTest.parenChecker(testString); + String testString2 = "()("; + boolean actual = parenthesisTest.parenChecker(testString2); //Then Assert.assertFalse(actual); } - @Test public void parenthesisCheckerTest3() { //Given ParenChecker parenthesisTest = new ParenChecker(); //When - String testString2 = "()<>"; - boolean actual = parenthesisTest.pairOfParenthesies(testString2); + String testString3 = "(i)p("; + boolean actual = parenthesisTest.parenChecker(testString3); //Then Assert.assertFalse(actual); @@ -53,13 +52,65 @@ public void parenthesisCheckerTest4() { ParenChecker parenthesisTest = new ParenChecker(); //When - String testString = "()<>''"; + String testString4 = "a(ki)loop(jj)hi"; + boolean actual = parenthesisTest.parenChecker(testString4); + + //Then + Assert.assertTrue(actual); + } + + + @Test + public void pairCheckerTest1() { + //Given + ParenChecker parenthesisTest = new ParenChecker(); + + + //When + String testString2 = ")()("; + boolean actual = parenthesisTest.pairOfParenthesies(testString2); + + //Then + Assert.assertFalse(actual); + } + + @Test + public void pairCheckerTest2() { + //Given + ParenChecker parenthesisTest = new ParenChecker(); + + //When + String testString = "[]<>"; boolean actual = parenthesisTest.pairOfParenthesies(testString); + //Then + Assert.assertTrue(actual); + } + + @Test + public void pairCheckerTest3() { + //Given + ParenChecker parenthesisTest = new ParenChecker(); + + + //When + String testString3 = "atom)p(min)low(da"; + boolean actual = parenthesisTest.pairOfParenthesies(testString3); + //Then Assert.assertFalse(actual); } -} -// Single ( -// more than one set () <> -// more than two sets () <> '' \ No newline at end of file + + @Test + public void pairCheckerTest4() { + //Given + ParenChecker parenthesisTest = new ParenChecker(); + + //When + String testString4 = "do[re]miaro"; + boolean actual = parenthesisTest.pairOfParenthesies(testString4); + + //Then + Assert.assertTrue(actual); + } +} \ No newline at end of file