2. Practical application 1: Arithmetic operations.
(a) [3 marks] Design an algorithm that takes a string, which represents an arithmetic
operation, as input and checks whether or not the brackets are correct (balanced) or incorrect
(unbalanced). The input string may contain a combination of the following characters:
{,},[,],(,),0,1,2,3,4,5,6,7,8,9,+,-,*,/. An obvious hint for this algorithm is to use the stack-
based solution discussed in class as a template, and hence you can use the stack implemented
in #1. Your algorithm must not check the correctness of the arithmetic operators/operands,
but only check for balanced brackets. Your algorithm should also show an error message
when the string contains a character that is not one of those listed above. Provide the
pseudocode of the algorithm.
(b) [3 marks] Implement the algorithm of (a) in your favorite programming language. Run
the program in several cases, including the following (more examples to be asked when the
assignment is submitted):
i. (9*[3*{[(3+3)/5]*7}])
ii. {3*(2+[3-[4/[6/9]]])}
iii. ((3*(9-(4*(6-5))))
iv. {2-{3*{6/[[[(((9-0)))]]]}}/7}
(c) [2 marks] Consider an input string of size n: (i) what is the worst-case time that your
algorithm takes to decide whether or not the string is correct (balanced) or incorrect
(unbalanced)? (ii) Why? Give your answers in terms of the O-notation.