day11 - 栈与队列part02
20. 有效的括号
详解
class Solution { public: bool isValid(string s) { //最里面一对是相邻闭合 stack<char> stack_1; for(int i=0; i< s.length(); i++){ if(s[i] == '(' || s[i] == '{' || s[i] == '['){ stack_1.push(s[i]); }else{ if(stack_1.empty()) return false; char tmp = stack_1.top(); if( (s[i] == ')' && tmp == '(') || (s[i] == '}' && tmp == '{') || (s[i] == ']' && tmp == '[') ){ stack_1.pop(); }else{ return false; } } } return empty(stack_1); } };
1047. 删除字符串中的所有相邻重复项
class Solution { public: string removeDuplicates(string s) { stack<char> stack_1; for(int i=0; i<s.length(); i++){ if(!empty(stack_1) && stack_1.top() == s[i]){ stack_1.pop(); }else{ stack_1.push(s[i]); } } s.resize(stack_1.size()); int i = stack_1.size() - 1; while(!stack_1.empty()){ s[i--] = stack_1.top(); stack_1.pop(); } return s; } };
150. 逆波兰表达式求值
//stoi 使用 class Solution { public: int evalRPN(vector<string>& tokens) { stack<int> stack_1; map<string, char> map_1; int result = 0; map_1["+"] = '+'; map_1["-"] = '-'; map_1["*"] = '*'; map_1["/"] = '/'; for(int i = 0; i < tokens.size(); i++){ if(map_1[tokens[i]]){ int num_2 = stack_1.top(); stack_1.pop(); int num_1 = stack_1.top(); stack_1.pop(); if(tokens[i] == "+") result = num_1 + num_2; else if(tokens[i] == "-") result = num_1 - num_2; else if(tokens[i] == "*") result = num_1 * num_2; else if(tokens[i] == "/") result = num_1 / num_2; cout << "push_result:" <<tokens[i]<<","<<num_2<<"="<< result << endl; stack_1.push(result); }else{ cout << "push:" << stoi(tokens[i]) << endl; stack_1.push(stoi(tokens[i])); } } return stack_1.top(); } };