【栈和队列刷题】 有效的括号、删除字符串中的所有相邻重复项、用栈实现队列、用队列实现栈
创始人
2024-02-18 03:56:23
0次

LeetCode20. 有效的括号

来源:力扣(LeetCode)
链接:link
思路:使用一个栈,遍历字符串。如果栈为空就直接将字符加入。如果不为空,判断字符是左字符还是右字符。如果是左字符,直接加入;如果是右字符,判断与栈顶字符是否匹配,若不匹配,直接返回false,若匹配则移除栈顶。循环直到字符串遍历完毕。最后如果栈为空,说明括号有效。

class Solution {
public:bool isValid(string s) {stack sk;if (s.size() % 2 != 0) return false; // 如果s的长度为奇数,一定不符合要求for(int i = 0; i < s.size(); i++){if(s[i] == '(' || s[i] == '{' || s[i] == '[') sk.push(s[i]);else{if(!sk.empty() && ((sk.top() == '(' && s[i] == ')') ||(sk.top() == '{' && s[i] == '}') ||(sk.top() == '[' && s[i] == ']'))) sk.pop();else return false;}}if(sk.empty()) return true;else return false;}
};

LeetCode1047. 删除字符串中的所有相邻重复项

来源:力扣(LeetCode)
链接:link
思路:借助栈,遍历字符串。如果栈顶字符和当前字符一致,直接pop;否则入栈。

class Solution {
public:string removeDuplicates(string s) {stack sk;string result;for(auto e : s){if(sk.empty() || sk.top() != e) sk.push(e);else sk.pop();}while(!sk.empty()){result += sk.top();sk.pop();}reverse(result.begin(), result.end());return result;}
};

LeetCode232.用栈实现队列

来源:力扣(LeetCode)
链接:link
思路:使用栈来模拟队列的行为,如果仅仅用一个栈,是一定不行的,所以需要两个栈一个输入栈,一个输出栈,这里要注意输入栈和输出栈的关系。

class MyQueue {
public:stack instack, outstack;MyQueue() {}void push(int x) {instack.push(x);}int pop() {if(outstack.empty()){while(!instack.empty()){outstack.push(instack.top());instack.pop();}}int res = outstack.top();outstack.pop();return res;}int peek() {int res = pop();outstack.push(res);return res;}bool empty() {return instack.empty() && outstack.empty();}
};

LeetCode225. 用队列实现栈

来源:力扣(LeetCode)
链接:link
思路:队列是先进先出的规则,把一个队列中的数据导入另一个队列中,数据的顺序并没有变,并没有变成先进后出的顺序。所以用栈实现队列, 和用队列实现栈的思路还是不一样的,这取决于这两个数据结构的性质。但是依然还是要用两个队列来模拟栈,只不过没有输入和输出的关系,而是另一个队列完全用又来备份的!

class MyStack {
public:queue inqueue, outqueue;//int size;MyStack() {//size = 0;}void push(int x) {inqueue.push(x);//size++;}int pop() {int size = inqueue.size();size--;while(size--){outqueue.push(inqueue.front());inqueue.pop();}int res = inqueue.front();inqueue.pop();while(!outqueue.empty()){inqueue.push(outqueue.front());outqueue.pop();}return res;}int top() {//int res = pop();//inqueue.push(res);//return res;return inqueue.back();}bool empty() {return inqueue.empty();}
};

相关内容

热门资讯

前端-session、jwt 目录:   (1)session (2&#x...
linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
nodejs:本地安装nvm实... 一、背景-使用不同版本node的原因 vue3+ts、nuxt3版本,node...
JAVA集合知识整理 Java集合知识整理 HashMap相关 HashMap的底层数据结构:jdk1.8之...
无刷直流电机介绍及单片机控制实... 无刷直流电机介绍及单片机控制实例前言基本概念优势与劣势使用寿命基本结构使用单片机控制实例电子调速器&...
fwdiary(2) dp2 1.传纸条  AcWing 275. 传纸条 - AcWing 走两条路,走一条最大的...
常用的DOS命令 常用的DOS命令 DOS(Disk Operating System,磁...
<C++> 类和对象(下) 1.const成员函数将const修饰的“成员函数”称之为const成员函数,cons...