文档讲解
栈
时间复杂度:O(n); 空间复杂度:O(n);
class Solution {
public:
bool isValid(string s) {
stack<char> stk;
for(int i=0;i<s.size();++i)
{
if(s[i]=='('||s[i]=='{'||s[i]=='[')
{
stk.push(s[i]);
}
else
{
if(stk.empty())return false;
if(s[i]==')'&&stk.top()=='(')
{
stk.pop();
}
else if(s[i]==']'&&stk.top()=='[')
{
stk.pop();
}
else if(s[i]=='}'&&stk.top()=='{')
{
stk.pop();
}
else
{
return false;
}
}
}
return stk.empty();
}
};
思路:一看到相邻的元素一样就消除,则联想到栈这种数据结构,最后返回的
string
还要处理下!
时间复杂度:O(n); 空间复杂度:O(n);
class Solution {
public:
string removeDuplicates(string s) {
if(s.empty())return s;
stack<char> stk;
for(int i=0;i<s.size();++i)
{
if(stk.empty())stk.push(s[i]);
else if(stk.top()==s[i])stk.pop();
else stk.push(s[i]);
}
s.resize(stk.size());
for(int i=stk.size()-1;i>=0;--i)
{
s[i]=stk.top();
stk.pop();
}
return s;
}
};
思路:其实这道题是数据结构中讲栈的时候,最经典的一个例子,我觉得卡住我的点就是忘了怎么把
string
转换long long
,记一下stoll()
函数
时间复杂度:O(n); 空间复杂度:O(n);
class Solution {
public:
int evalRPN(vector<string>& tokens) {
stack<long long> stk;
for(int i=0;i<tokens.size();i++)
{
if(tokens[i]=="+"||tokens[i]=="-"||tokens[i]=="*"||tokens[i]=="/")
{
long long num1=stk.top();
stk.pop();
long long num2=stk.top();
stk.pop();
if(tokens[i]=="+") stk.push(num1+num2);
if(tokens[i]=="-") stk.push(num2-num1);
if(tokens[i]=="*") stk.push(num2*num1);
if(tokens[i]=="/") stk.push(num2/num1);
}
else
{
stk.push(stoll(tokens[i]));
}
}
int result=stk.top();
stk.pop();
return result;
}
};