20. 有效的括号
题目链接:20. 有效的括号
class Solution {
public:
bool isValid(string s) {
stack<char> stack1;
for(int i = 0; i < s.size(); i++){
if(s[i] == '}' && !stack1.empty() && stack1.top() == '{'){
stack1.pop();
}else if(s[i] == ')' && !stack1.empty() && stack1.top() == '('){
stack1.pop();
}else if(s[i] == ']' && !stack1.empty() && stack1.top() == '['){
stack1.pop();
}else{
stack1.push(s[i]);
}
}
if(stack1.empty()){
return true;
}else{
return false;
}
}
};
1047. 删除字符串中的所有相邻重复项
题目链接:1047. 删除字符串中的所有相邻重复项
注意事项:
- 在向string类型的r添加字符时,注意因为添加的是字符类型,不是字符串,所以要用push_back(),而不是append()
- 还可以直接将stack1向字符串赋值,然后把string字符串反转一下:reverse (result.begin(), result.end());
- 还可以直接将字符串模拟成栈进行操作
class Solution {
public:
string removeDuplicates(string s) {
stack<char> stack1;
for(int i = 0; i < s.size(); i++){
if(!stack1.empty() && s[i] == stack1.top()){
stack1.pop();
}else{
stack1.push(s[i]);
}
}
stack<char> stack2;
while(!stack1.empty()){
stack2.push(stack1.top());
stack1.pop();
}
string r;
while(!stack2.empty()){
r.push_back(stack2.top());
stack2.pop();
}
return r;
}
};
150. 逆波兰表达式求值
题目链接:150. 逆波兰表达式求值
注意事项:
- 注意在进行计算时两个数字的顺序,究竟哪个是除数哪个是被除数,哪个是减数哪个是被减数
class Solution {
public:
int evalRPN(vector<string>& tokens) {
stack<long long> st;
for(int i = 0; i < tokens.size(); i++){
if(tokens[i] == "+" || tokens[i] == "-" || tokens[i] == "*" || tokens[i] == "/"){
long long n1, n2;
n1 = st.top();
st.pop();
n2 = st.top();
st.pop();
if(tokens[i] == "+")st.push(n2 + n1);
if(tokens[i] == "-")st.push(n2 - n1);
if(tokens[i] == "*")st.push(n2 * n1);
if(tokens[i] == "/")st.push(n2 / n1);
}else{
st.push(stoll(tokens[i]));
}
}
int temp = st.top();
st.pop();
return temp;
}
};