Implement an arithmetic expression evaluator that takes a string containing non-negative integers, '+', '-', '*', '/', parentheses, and whitespace, and returns the integer result. Support unary minus (e.g., '-3+5'), 64-bit intermediate results, and integer division truncating toward zero. Aim for O(n) time and O(n) space; describe your approach and edge cases.