20. 有效的括号
思路
如果出现左括号,就push对应的右括号进来,然后遇到右括号,如果和栈顶相同,那就让栈顶出站,如果不同,那就直接返回false。
代码实现
class Solution {
public:
bool isValid(string s) {
stack<char>stk;
for(auto c: s)
{
if(c=='[') stk.push(']');
else if(c=='{') stk.push('}');
else if(c=='(') stk.push(')');
else if(stk.empty()||c!=stk.top())
return false;
else stk.pop();
}
return stk.empty();
}
};
1047. 删除字符串中的所有相邻重复项
思路
如果当前的元素等于栈顶元素,那么就将栈顶出栈。
代码实现
class Solution {
public:
string removeDuplicates(string s) {
string res;
for( auto c : s)
{
if(res.empty()||c!=res.back())
{
res.push_back(c);
}
else
{
res.pop_back();
}
}
return res;
}
};
150. 逆波兰表达式求值
思路
还是运用栈的思想,这个栈只储存数字,如果遇到了+-*/,那么就将栈顶两个元素出栈,然后进行计算即可。
代码实现
class Solution {
public:
int evalRPN(vector<string>& tokens) {
stack<int>stk;
for(int i = 0 ; i < tokens.size(); i ++)
{
if(tokens[i]=="+"||tokens[i]=="-"||tokens[i]=="*"||tokens[i]=="/")
{
int cur2 = stk.top();
stk.pop();
int cur1 = stk.top();
stk.pop();
int sum;
if(tokens[i]=="+")
sum = cur1+cur2;
if(tokens[i]=="-")
sum = cur1-cur2;
if(tokens[i]=="*")
sum = cur1*cur2;
if(tokens[i]=="/")
sum = cur1/cur2;
stk.push(sum);
}
else
{
stk.push(stoi(tokens[i]));
}
}
return stk.top();
}
};
收获
stoi可以将字符直接变为数字。