目录
题目链接:232. 用栈实现队列 - 力扣(LeetCode)
题目链接:225. 用队列实现栈 - 力扣(LeetCode)
题目链接:1047. 删除字符串中的所有相邻重复项 - 力扣(LeetCode)
前言
LeetCode232.用栈实现队列
LeetCode225.用队列实现栈
LeetCode20.有效的括号
LeetCode1047.删除字符串中的所有相邻重复项
视频讲解:LeetCode:1047. 删除字符串中的所有相邻重复项
一、LeetCode232.用栈实现队列
题目链接:232. 用栈实现队列 - 力扣(LeetCode)
代码:
class MyQueue {
public:
stack<int> stdIn;
stack<int> stdOut;
MyQueue() {
}
void push(int x) {
stdIn.push(x);
}
int pop() {
if(stdOut.empty() && stdIn.empty())
return -1;
int ret;
if(stdOut.empty())
{
while(!stdIn.empty())
{
stdOut.push(stdIn.top());
stdIn.pop();
}
}
ret = stdOut.top();
stdOut.pop();
return ret;
}
int peek() {
int ret = this->pop();
stdOut.push(ret);
return ret;
}
bool empty() {
return stdIn.empty() && stdOut.empty();
}
};
/**
* Your MyQueue object will be instantiated and called as such:
* MyQueue* obj = new MyQueue();
* obj->push(x);
* int param_2 = obj->pop();
* int param_3 = obj->peek();
* bool param_4 = obj->empty();
*/
二、LeetCode225.用队列实现栈
题目链接:225. 用队列实现栈 - 力扣(LeetCode)
代码:
class MyStack {
public:
int flag;
queue<int> que1;
queue<int> que2;
MyStack() {
this->flag = 0;
}
void push(int x) {
if(flag == 0)
{
que1.push(x);
}
else
{
que2.push(x);
}
}
int pop() {
if(flag == 0)
{
if(que1.empty())
return -1;
flag = 1;
while(que1.size() != 1)
{
que2.push(que1.front());
que1.pop();
}
int ret = que1.front();
que1.pop();
return ret;
}
else
{
if(que2.empty())
return -1;
flag = 0;
while(que2.size() != 1)
{
que1.push(que2.front());
que2.pop();
}
int ret = que2.front();
que2.pop();
return ret;
}
}
int top() {
if(flag == 0)
return que1.back();
else
return que2.back();
}
bool empty() {
if(flag == 0)
return que1.empty();
else
return que2.empty();
}
};
/**
* Your MyStack object will be instantiated and called as such:
* MyStack* obj = new MyStack();
* obj->push(x);
* int param_2 = obj->pop();
* int param_3 = obj->top();
* bool param_4 = obj->empty();
*/
三、LeetCode20.有效的括号
题目链接:20. 有效的括号 - 力扣(LeetCode)
代码:
class Solution {
public:
bool isLeftBracket(char c)
{
if(c == '(' || c == '{' || c == '[')
return true;
else
return false;
}
bool isValid(string s) {
stack<char> leftBracket;
for(int i = 0; i < s.size(); i++)
{
if(isLeftBracket(s[i]))
leftBracket.push(s[i]);
else
{
if(leftBracket.empty())
return false;
if(s[i] == ')' && leftBracket.top() != '(')
{
return false;
}
else if(s[i] == '}' && leftBracket.top() != '{')
{
return false;
}
else if(s[i] == ']' && leftBracket.top() != '[')
{
return false;
}
leftBracket.pop();
}
}
if(leftBracket.empty())
return true;
return false;
}
};
四、LeetCode1047.删除字符串中的所有相邻重复项
题目链接:1047. 删除字符串中的所有相邻重复项 - 力扣(LeetCode)
代码:
class Solution {
public:
string removeDuplicates(string s) {
stack<char> lastChar;
for(int i = 0; i < s.size(); i++)
{
if(lastChar.empty() || lastChar.top() != s[i])
{
lastChar.push(s[i]);
}
else
{
lastChar.pop();
}
}
string retStr;
retStr.resize(lastChar.size());
int i = lastChar.size() - 1;
while(!lastChar.empty())
{
retStr[i--] = lastChar.top();
lastChar.pop();
}
return retStr;
}
};