Przeglądaj źródła

ParenCheckergit status

Chaitali Patel 7 lat temu
rodzic
commit
43e7975214

+ 82
- 0
src/main/java/io/zipcoder/ParenChecker.java Wyświetl plik

@@ -1,4 +1,86 @@
1 1
 package io.zipcoder;
2 2
 
3
+
3 4
 public class ParenChecker {
5
+
6
+    static class stack {
7
+        int top = -1;
8
+        char items[] = new char[100];
9
+
10
+        void push(char x) {
11
+            if (top == 99) {
12
+                System.out.println("Stack full");
13
+            } else {
14
+                items[++top] = x;
15
+            }
16
+        }
17
+
18
+        char pop() {
19
+            if (top == -1) {
20
+                System.out.println("Underflow error");
21
+                return '\0';
22
+            } else {
23
+                char element = items[top];
24
+                top--;
25
+                return element;
26
+            }
27
+        }
28
+
29
+        boolean isEmpty() {
30
+            return (top == -1) ? true : false;
31
+        }
32
+    }
33
+
34
+    /* Returns true if character1 and character2
35
+       are matching left and right Parenthesis */
36
+    static boolean isMatchingPair(char character1, char character2) {
37
+        if (character1 == '(' && character2 == ')')
38
+            return true;
39
+        else if (character1 == '{' && character2 == '}')
40
+            return true;
41
+        else if (character1 == '[' && character2 == ']')
42
+            return true;
43
+        else
44
+            return false;
45
+    }
46
+
47
+
48
+    static boolean areParenthesisBalanced(String exp) {
49
+        /* Declare an empty character stack */
50
+        stack stack = new stack();
51
+
52
+
53
+        for (int i = 0; i < exp.length(); i++) {
54
+            char s = exp.charAt(i);
55
+
56
+            if (s == '{' || s == '(' || s == '[')
57
+                stack.push (s);
58
+            if (s == '}' || s == ')' || s == ']') {
59
+
60
+                if (stack.isEmpty()) {
61
+                    return false;
62
+                } else if (!isMatchingPair(stack.pop(), s)) {
63
+                    return false;
64
+                }
65
+            }
66
+        }
67
+        if (stack.isEmpty()) {
68
+            return true; /*balanced*/
69
+        } else {   /*not balanced*/
70
+            return false;
71
+        }
72
+    }
73
+
74
+    /* UTILITY FUNCTIONS */
75
+    /*driver program to test above functions*/
76
+    public static void main(String[] args) {
77
+        String exp = " '{', '(', ')', '}', '[', ']' ";
78
+        if (areParenthesisBalanced(exp))
79
+            System.out.println("Balanced ");
80
+        else
81
+            System.out.println("Not Balanced ");
82
+    }
4 83
 }
84
+
85
+
86
+

+ 42
- 0
src/test/java/io/zipcoder/ParenCheckerTest.java Wyświetl plik

@@ -5,4 +5,46 @@ import org.junit.Test;
5 5
 
6 6
 public class ParenCheckerTest {
7 7
 
8
+    @Test
9
+    public void isMatchingPair() {
10
+
11
+        boolean expected = false;
12
+        boolean actual = ParenChecker.isMatchingPair('{',')');
13
+       Assert.assertEquals(expected, actual);
14
+
15
+    }
16
+
17
+    @Test
18
+    public void isMatchingPair2() {
19
+
20
+        boolean expected = true;
21
+        boolean actual = ParenChecker.isMatchingPair('[',']');
22
+        Assert.assertEquals(expected, actual);
23
+
24
+    }
25
+
26
+
27
+    @Test
28
+    public void areParenthesisBalanced() {
29
+        ParenChecker balanced = new ParenChecker();
30
+        String str = "()[]{}[][]";
31
+
32
+        boolean expected = true;
33
+        boolean acutal = ParenChecker.areParenthesisBalanced(str);
34
+
35
+        Assert.assertEquals(true,acutal);
36
+
37
+    }
38
+
39
+    @Test
40
+    public void areParenthesisBalanced2() {
41
+        ParenChecker balanced = new ParenChecker();
42
+        String str = "([}])))";
43
+
44
+        boolean expected = false;
45
+        boolean acutal = ParenChecker.areParenthesisBalanced(str);
46
+
47
+        Assert.assertEquals(false,acutal);
48
+
49
+    }
8 50
 }