lintcode-将表达式转换为逆波兰表达式-370

给定一个表达式字符串数组,返回该表达式的逆波兰表达式(即去掉括号)。


样例 对于 [3 - 4 + 5]的表达式(该表达式可表示为["3", "-", "4", "+", "5"]),返回 [3 4 - 5 +](该表达式可表示为 ["3", "4", "-", "5", "+"])


class Solution {
public:
   inline  void init()  
  {  
    level["+"]=0;
    level["-"]=0;
    level["*"]=1;
    level["/"]=1;
    level["["]=2;
    level["]"]=2;
    level["("]=3;
    level[")"]=3;
 }  
   inline bool check_number(const string &s)
  {
    for(auto &e:s)
        if(e>'9'||e<'0')
            return false;
    return true;
  }
    vector<string> convertToRPN(vector<string> &arr) {
        init();
	vector<string> result;
	stack <string> s;
    for(auto &e:arr){
        if(check_number(e))
            result.push_back(e);
       	else if(e==")"){
	    while(s.top()!="("){
	        result.push_back(s.top());
		    s.pop();
	    }
	    s.pop();
	}else if(e=="]"){
            while(s.top()!="["){
	        result.push_back(s.top());
		    s.pop();
	    }
	    s.pop();
	}else{
	    while(!s.empty()&&s.top()!="["&&s.top()!="("&&level[e]<=level[s.top()]){
		result.push_back(s.top());
		s.pop();	
	    }
	    s.push(e);
	}
    }
    while(!s.empty()) {
	result.push_back(s.top());
	s.pop();
    }
	return result;
 }  
private:
        map<string,int> level; 
};


你可能感兴趣的:(lintcode-将表达式转换为逆波兰表达式-370)