File tree Expand file tree Collapse file tree 2 files changed +97
-0
lines changed Expand file tree Collapse file tree 2 files changed +97
-0
lines changed Original file line number Diff line number Diff line change 1+ #!/usr/bin/python3
2+
3+ def max_nested_braces (expr ):
4+ pass
5+
6+ assert max_nested_braces ('a*b' ) == 0
7+ assert max_nested_braces ('a*b{' ) == - 1
8+ assert max_nested_braces ('a*{b+c}' ) == 1
9+ assert max_nested_braces ('{a+2}*{b+c}' ) == 1
10+ assert max_nested_braces ('a*{b+c*{e*3.14}}' ) == 2
11+ assert max_nested_braces ('a*{b+c*{e*3.14}}}' ) == - 1
12+ assert max_nested_braces ('a*{b+c}}' ) == - 1
13+ assert max_nested_braces ('a*b+{}' ) == 1
14+ assert max_nested_braces ('}a+b{' ) == - 1
15+ assert max_nested_braces ('{{a+2}*{b+c}+e}' ) == 2
16+ assert max_nested_braces ('{{a+2}*{b+{c*d}}+e}' ) == 3
17+ assert max_nested_braces ('{{a+2}*{{b+{c*d}}+e*d}}' ) == 4
18+ assert max_nested_braces ('{{a+2}*{{b}+{c*d}}+e*d}}' ) == - 1
19+
20+ print ('all tests passed' )
21+
22+
23+ #### alternate using regular expressions
24+
25+ #import re
26+ #
27+ #def max_nested_braces(expr):
28+ # count = 0
29+ # while True:
30+ # expr_sub = re.sub(r'\{[^{}]*\}', '', expr)
31+ # if expr_sub == expr:
32+ # break
33+ # count += 1
34+ # expr = expr_sub
35+ #
36+ # if re.search(r'[{}]', expr):
37+ # return -1
38+ # return count
39+
40+ # for bonus, use + instead of *
41+ #assert max_nested_braces('a*b+{}') == -1
42+ #assert max_nested_braces('a*{b+{}+c*{e*3.14}}') == -1
Original file line number Diff line number Diff line change 1+ #!/usr/bin/python3
2+
3+ def max_nested_braces (expr ):
4+ max_count = count = 0
5+ for char in expr :
6+ if char == '{' :
7+ count += 1
8+ if count > max_count :
9+ max_count = count
10+ elif char == '}' :
11+ if count == 0 :
12+ return - 1
13+ count -= 1
14+
15+ if count != 0 :
16+ return - 1
17+ return max_count
18+
19+ assert max_nested_braces ('a*b' ) == 0
20+ assert max_nested_braces ('a*b{' ) == - 1
21+ assert max_nested_braces ('a*{b+c}' ) == 1
22+ assert max_nested_braces ('{a+2}*{b+c}' ) == 1
23+ assert max_nested_braces ('a*{b+c*{e*3.14}}' ) == 2
24+ assert max_nested_braces ('a*{b+c*{e*3.14}}}' ) == - 1
25+ assert max_nested_braces ('a*{b+c}}' ) == - 1
26+ assert max_nested_braces ('a*b+{}' ) == 1
27+ assert max_nested_braces ('}a+b{' ) == - 1
28+ assert max_nested_braces ('{{a+2}*{b+c}+e}' ) == 2
29+ assert max_nested_braces ('{{a+2}*{b+{c*d}}+e}' ) == 3
30+ assert max_nested_braces ('{{a+2}*{{b+{c*d}}+e*d}}' ) == 4
31+ assert max_nested_braces ('{{a+2}*{{b}+{c*d}}+e*d}}' ) == - 1
32+
33+ print ('all tests passed' )
34+
35+
36+ #### alternate using regular expressions
37+
38+ #import re
39+ #
40+ #def max_nested_braces(expr):
41+ # count = 0
42+ # while True:
43+ # expr_sub = re.sub(r'\{[^{}]*\}', '', expr)
44+ # if expr_sub == expr:
45+ # break
46+ # count += 1
47+ # expr = expr_sub
48+ #
49+ # if re.search(r'[{}]', expr):
50+ # return -1
51+ # return count
52+
53+ # for bonus, use + instead of *
54+ #assert max_nested_braces('a*b+{}') == -1
55+ #assert max_nested_braces('a*{b+{}+c*{e*3.14}}') == -1
You can’t perform that action at this time.
0 commit comments