232.用栈实现队列
timutimtit232. 用栈实现队列 - 力扣(LeetCode)
class MyQueue {
public:
stack<int> Sin;
stack<int> Sout;
MyQueue() {
}
void push(int x) {
Sin.push(x);
}
int pop() {
if (Sout.empty()) { // 出栈为空就把入栈的数导出来
while (!Sin.empty()) { // 直到入栈为空
Sout.push(Sin.top());
Sin.pop();
}
}
int res = Sout.top();
Sout.pop();
return res;
}
int peek() {
int res = this->pop(); // 这里是自己的指针调用pop函数,所以用->
Sout.push(res);
return res;
}
bool empty() {
return Sin.empty() && Sout.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();
*/
225.用队列实现栈
题目链接:225. 用队列实现栈 - 力扣(LeetCode)
class MyStack { // 用一个栈实现
public:
queue<int> que;
MyStack() {
}
void push(int x) {
que.push(x);
}
int pop() {
int size = que.size() - 1; // 只留队列中最后一个元素进行返回
while (size--) {
que.push(que.front());
que.pop();
}
int result = que.front();
que.pop();
return result;
}
int top() {
int res = this->pop();
que.push(res);
return res;
}
bool empty() {
return que.empty();
}
};
class MyStack { // 用两个栈实现
public:
queue<int> que1;
queue<int> que2;
MyStack() {
}
void push(int x) {
que1.push(x);
}
int pop() {
int size = que1.size();
size--;
while (size--) {
que2.push(que1.front());
que1.pop();
}
int result = que1.front();
que1.pop();
que1=que2;
while (!que2.empty()) {
que2.pop();
}
return result;
}
int top() {
int result = this->pop(); // 功能复用
que1.push(result);
return result;
}
bool empty() {
return que1.empty();//第二个队列总为空,检查第一个队列就行
}
};
20.有效的括号
class Solution {
public:
bool isValid(string s) {
stack<int> st;
if (s.size() % 2 != 0)return false;
for (int i = 0; i < s.size(); i++) {
if (s[i] == '(')
st.push(')');
else if (s[i] == '[')
st.push(']');
else if (s[i] == '{')
st.push('}');
else if (st.empty() || st.top() != s[i])
return false;
else
st.pop();
}
return st.empty(); // 不是直接return true,完全匹配完才return true
}
};
1047.删除字符串中的所有相邻重复项
题目链接:1047. 删除字符串中的所有相邻重复项 - 力扣(LeetCode)
class Solution { // 用栈来实现
public:
string removeDuplicates(string S) {
stack<int> st;
for (char s:S) {
if(st.empty() || s != st.top()) {
st.push(s);
}
else{
st.pop();
}
}
string result = "";
while (!st.empty()) {
result += st.top();
st.pop();
}
reverse(result.begin(), result.end());
return result;
}
};
class Solution { // 用字符串当栈来用
public:
string removeDuplicates(string S) {
string result;
for (char s:S) {
if(result.empty() || s != result.back()) {
result.push_back(s);
}
else{
result.pop_back();
}
}
return result;
}
};
519

被折叠的 条评论
为什么被折叠?



