expression[i] consists of characters in {'(', ')', '&', '|', '!', 't', 'f', ','}.
expression is a valid expression representing a boolean, as given in the description.
Solutions
🧠 Cpp
classSolution{ // IN: string with coma separated BOOL expressions // OUT: list of corresponding BOOL valueslist<bool> deduceBoolList(string exprs) { list<bool> res;constchar*c_exprs =exprs.c_str();do { //if we are on coma. step over itif(*c_exprs ==',') c_exprs++; //if we have an operator with argumetsif(c_exprs[1] =='(') { //to find the end, we must count every ()constchar*exp_end = c_exprs+2;size_t active_parentheses_num =1;while(active_parentheses_num) { exp_end++;if(*exp_end =='(') active_parentheses_num++;if(*exp_end ==')') active_parentheses_num--; } //when end is found form string with whole expression string exp(c_exprs, exp_end-c_exprs+1);res.push_back(parseBoolExpr(exp)); c_exprs = exp_end+1; }else { string exp(1,*c_exprs);res.push_back(parseBoolExpr(exp)); } }while(c_exprs =strchr(c_exprs,','));return res; }usingfbbb=function<bool(bool,bool)>;public:boolparseBoolExpr(string expression) {if(expression =="f")returnfalse;if(expression =="t")returntrue; //3 chars: !() string in_parentheses =expression.substr(2,expression.size() -3); //check for !if(expression.front() =='!')return!parseBoolExpr(in_parentheses); //else we have & or | list<bool> values =deduceBoolList(in_parentheses);auto operation =expression.front() =='&'? (fbbb)bit_and<bool>() :bit_or<bool>();return std::accumulate(values.begin(),values.end(),values.front(), operation); }};