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();
}
};