栈的介绍和使用(算法)

栈最大的特点是先进先出。利用这个特点应用于我们的日常生活会有很大的便利。下面我们一起来看看吧。

class Solution {

public:

int calculate(string s) {

//用数组来模拟栈

vector<int> st;

int i=0,n=s.size();

char op='+';

while(i<n){

if(s[i]==' ') i++;

else if(s[i]>='0'&&s[i]<='9'){

int tmp=0;

while(i<n&&s[i]>='0'&&s[i]<='9')

tmp=tmp*10+(s[i++]-'0');

if(op=='+') st.push_back(tmp);

else if(op=='-') st.push_back(-tmp);

else if(op=='*') st.back()*=tmp;

else st.back()/=tmp;

}else{

op=s[i];

i++;

}

}

int sum=0;

for(auto e: st){

sum+=e;

}

return sum;

}

};

class Solution {

public:

string decodeString(string s) {

stack<int> nums;

stack<string> st;

st.push("");

int i=0,n=s.size();

while(i<n){

if(s[i]>='0'&&s[i]<='9'){

int tmp=0;

while(s[i]>='0'&&s[i]<='9'){

tmp=tmp*10+(s[i++]-'0');

}

nums.push(tmp);

}else if(s[i]=='['){

i++;

string tmp="";

while(s[i]>='a'&&s[i]<='z'){

tmp+=s[i++];

}

st.push(tmp);

}else if(s[i]==']'){

string tmp=st.top();

st.pop();

int k=nums.top();

nums.pop();

while(k--){

st.top()+=tmp;

}

i++;

}else{

string tmp;

while(i<n&&s[i]>='a'&&s[i]<='z'){

tmp+=s[i++];

}

st.top()+=tmp;

}

}

return st.top();

}

};

class Solution {

public:

bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {

int n=popped.size();

stack<int> result;

int i=0;

for(auto e: pushed){

result.push(e);

while(result.size()&&result.top()==popped[i]){

result.pop();

i++;

}

}

return i==n;

}

};

相关推荐
AI科技星6 分钟前
《全域数学》第一部 数术本源 第三卷 代数原本第14篇 附录二 猜想证明【乖乖数学】
人工智能·算法·数学建模·数据挖掘·量子计算
Wect20 分钟前
LeetCode 72. 编辑距离:动态规划经典题解
前端·算法·typescript
憨波个28 分钟前
【说话人日志】DOVER-Lap:overlap-aware diarization 输出融合算法
人工智能·深度学习·算法·音频·语音识别
叼烟扛炮35 分钟前
C++第四讲:类和对象(下)
c++·算法·类和对象
Rabitebla36 分钟前
vector 的骨架:三根指针、模板陷阱与迭代器失效的第一现场
开发语言·数据结构·c++·算法
代码不停1 小时前
BFS解决floodfill算法题目练习
算法·宽度优先
上弦月-编程1 小时前
C语言指针从入门到实战
java·jvm·算法
WL_Aurora1 小时前
Python 算法基础篇之树和二叉树
python·算法
txzrxz1 小时前
关于前缀和
算法·动态规划·图论
杨连江1 小时前
载流子矩阵限域束缚实现常温常压超导的理论与结构设计
算法