您的位置:首页 > 其它

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

2015-10-11 22:46 363 查看
给定一个表达式字符串数组,返回该表达式的逆波兰表达式(即去掉括号)。

样例 对于
[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;
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: