Phone Screen included classic "balanced bracket" algorithm.
Anonymous
import org.junit.Assert; import org.junit.Test; import org.junit.runner.JUnitCore; import java.io.*; import java.util.*; /* Assume that you have an input string that is comprised of *balanced* pairs of "(" and ")" and other characters, return a list containing all non-parenthesis within the given capturing group. // ----- some test cases ------ captured("(a)", 1) -> ['a'] captured("((a))", 2) -> ['a'] captured("(a(b)c(d)e)", 1) -> ['a', 'b', 'c', 'd', 'e'] captured("(a(b(h)k)c(d)e)", 2) -> ['b'] captured("(a(b)c(d)e)", 3) -> ['d'] captured("(a(b(c)d)e)", 1) -> ['a', 'b', 'c', 'd', 'e'] captured("(a(b(c)d)e)", 2) -> ['b', 'c', 'd'] captured("(a(b(c)d)e)", 3) -> ['c'] captured("ab(cd)", 1) -> ['c', 'd'] captured("()(abc)", 1) -> [] captured("()(abc)", 2) -> ['a', 'b', 'c'] */ public class Solution { // TODO: Implement me! static List captured(String input, int group) { List results = new ArrayList(); if(group stack = new ArrayDeque(); int traceInnerPern = 0; Boolean isDeduct = false; for(int i=0;i0 && stack.size() == group) { stack.pop(); isDeduct = true; // for first pop } else if(aChar==')' && stack.size() == group ) // decresase inner parenthasis traceInnerPern--; } if(stack.size() == group) //inside the group { if(aChar!='(' && aChar!=')') { results.add(aChar); } } } return results; } @Test public void test01() { Assert.assertEquals(Collections.emptyList(), captured("()", 1)); } @Test public void test02() { org.junit.Assert.assertEquals(Arrays.asList('a'), captured("(a)", 1)); } @Test public void test03() { Assert.assertEquals(Arrays.asList('a'), captured("((a))", 1)); } @Test public void test04() { Assert.assertEquals(Arrays.asList('a'), captured("((a))", 2)); } @Test public void test05() { Assert.assertEquals(Arrays.asList('a', 'b', 'c', 'd', 'e'), captured("(a(b)c(d)e)", 1)); } @Test public void test06() { Assert.assertEquals(Arrays.asList('b'), captured("(a(b)c(d)e)", 2)); } @Test public void test07() { Assert.assertEquals(Arrays.asList('d'), captured("(a(b)c(d)e)", 3)); } @Test public void test08() { Assert.assertEquals(Arrays.asList('a', 'b', 'c', 'd', 'e'), captured("(a(b(c)d)e)", 1)); } @Test public void test09() { Assert.assertEquals(Arrays.asList('b', 'c', 'd'), captured("(a(b(c)d)e)", 2)); } @Test public void test10() { Assert.assertEquals(Arrays.asList('c'), captured("(a(b(c)d)e)", 3)); } @Test public void test11() { Assert.assertEquals(Arrays.asList('c', 'd'), captured("ab(cd)", 1)); } @Test public void test12() { Assert.assertEquals(Collections.emptyList(), captured("()(abc)", 1)); } @Test public void test13() { Assert.assertEquals(Arrays.asList('a', 'b', 'c'), captured("()(abc)", 2)); } @Test public void test14() { Assert.assertEquals(Arrays.asList('a'), captured("(a)(b)((c)d)", 1)); } @Test public void test15() { Assert.assertEquals(Arrays.asList('b'), captured("(a)(b)((c)d)", 2)); } @Test public void test16() { Assert.assertEquals(Arrays.asList('c', 'd'), captured("(a)(b)((c)d)", 3)); } @Test public void test17() { Assert.assertEquals(Arrays.asList('c'), captured("(a)(b)((c)d)", 4)); } public static void main(String[] args) { JUnitCore.main("Solution"); } }
Check out your Company Bowl for anonymous work chats.