栈的介绍和使用(算法)

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

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;

}

};

相关推荐
吴可可1233 分钟前
用Teigha修改并保存CAD文件
数据库·算法·c#
汉克老师1 小时前
GESP6级C++考试语法知识(十七、数据结构(三、认识队列 Queue))
数据结构·c++·队列·gesp6级·gesp六级·数组模拟队列
灰灰勇闯IT1 小时前
ops-reduce:ReduceMax 与 ReduceMean 的并行优化
算法
水木流年追梦1 小时前
大模型入门-Reward 奖励模型训练
开发语言·python·算法·leetcode·正则表达式
JavaWeb学起来1 小时前
Python学习教程(六)数据结构List(列表)
数据结构·python·python基础·python教程
沙威玛_LHE1 小时前
P13376题解
算法
DFT计算杂谈2 小时前
KPROJ编译教程
java·前端·python·算法·conda
重生之我是Java开发战士2 小时前
【笔试强训】Week5:空调遥控, kotor和气球,走迷宫,主持人调度II,体操队形,二叉树的最大路径和,排序子序列,消减整数
java·算法·动态规划
吃好睡好便好3 小时前
用if…end…语句计算分段函数
开发语言·人工智能·学习·算法·matlab
灰灰勇闯IT3 小时前
ops-memory:CANN Runtime 的 Tensor 内存管理
算法