前言
要熟练掌握数据结构
第十一天打卡,栈的专题使用
栈
LeetCode 20. 有效的括号
LeetCode 20. 有效的括号
文章讲解
视频讲解
状态 : AC
经典的栈的使用
- AC代码示例:
class Solution {
public:
bool isValid(string s) {
stack<char>a;
for(auto i:s){
if(i=='('){
a.push(i);
}
if(i=='{'){
a.push(i);
}
if(i=='['){
a.push(i);
}
if(i==')'){
if(!a.size()){
return false;
}else if(a.top()=='(')a.pop();
else return false;
}
if(i==']'){
if(!a.size()){
return false;
}else if(a.top()=='[')a.pop();
else return false;
}
if(i=='}'){
if(!a.size()){
return false;
}else if(a.top()=='{')a.pop();
else return false;
}
}
if(a.size()){
return false;
}
return true;
}
};
- 时间复杂度:O(n)
- 空间复杂度:O(n)
LeetCode 1047. 删除字符串中的所有相邻重复项
LeetCode 1047. 删除字符串中的所有相邻重复项
文章讲解
视频讲解
状态 : AC
找到重复项后两个都要删除
- AC代码示例:
class Solution {
public:
string removeDuplicates(string s) {
string ans;
stack<char> st;
for(auto i:s){
if(st.size()){
if(i==st.top()){
st.pop();
}else{
st.push(i);
}
}else{
st.push(i);
}
}
while(st.size()){
auto i=st.top();
st.pop();
ans+=i;
}
reverse(ans.begin(), ans.end());
return ans;
}
};
- 时间复杂度:O(n)
- 空间复杂度:O(1)
LeetCode 150. 逆波兰表达式求值
LeetCode 150. 逆波兰表达式求值
文章讲解
视频讲解
状态 : AC
安装题目描述模拟一下
然后就使用栈了
- AC代码示例:
class Solution {
public:
int evalRPN(vector<string>& tokens) {
stack<int> st;
for(string i:tokens){
if(i=="+" || i =="-"||i=="*"||i=="/"){
auto a = st.top();
st.pop();
auto b =st.top();
st.pop();
if(i=="+"){
auto k=a+b;
st.push(k);
}else if(i=="-"){
auto k=b-a;
st.push(k);
}else if(i=="*"){
auto k=a*b;
st.push(k);
}else if(i=="/"){
int k=b/a;
st.push(k);
}
}else{
st.push(stoi(i));
}
}
return st.top();
}
};
- 时间复杂度:O(n)
- 空间复杂度:O(1)
总结
要熟练对栈的使用
2024- 4-29