day10 栈与队列part01

C++

序列容器关联容器不可排序的关联容器
vectorsetunordered_set
listmulitsetunordered_multiset
dequemapunordered_map
multimapunordered_multimap

容器适配器(Container Adapters)
std::stack
std::queue

尽管它们不是容器,但它们内部使用了容器(如 std::vector 或 std::deque)来实现其功能。用户通常不需要关心底层容器的细节,因为 stack 和 queue 提供了抽象的操作接口。

栈是以底层容器完成其所有的工作,对外提供统一的接口,底层容器是可插拔的(也就是说我们可以控制使用哪种容器来实现栈的功能)。

255 用队列实现栈

题目
在这里插入图片描述

class MyStack {
public:
    queue<int> q;
    int size;

    MyStack() {
        size = 0;
    }
    
    void push(int x) {
        q.push(x);
        size++;
    }
    
    int pop() {
        int result;
        int tmp;
        for(int i = 0; i < size - 1; i++) {
            tmp = q.front();
            q.pop();
            q.push(tmp);
        }

        tmp = q.front();
        q.pop();
        size--;
        return tmp;
    }
    
    int top() {
        int ret;
        ret = q.back();
        return ret;
    }
    
    bool empty() {
        return q.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();
 */

20 有效的括号

题目
在这里插入图片描述

class Solution {
public:
    bool isValid(string s) {
        stack<char> bucket;

        for(int i = 0; i < s.size(); i++) {
           
            switch(s[i]) {
                case '(':
                case '[':
                case '{':
                    bucket.push(s[i]);
                    break;
                case ')':
                    if(!bucket.empty() && bucket.top() == '(') {
                        bucket.pop();
                    } else {
                        bucket.push(s[i]);
                    }
                    break;
                case ']':
                    if(!bucket.empty() && bucket.top() == '[') {
                        bucket.pop();
                    } else {
                        bucket.push(s[i]);
                    }
                    break;
                case '}':
                    if(!bucket.empty() && bucket.top() == '{') {
                        bucket.pop();
                    } else {
                        bucket.push(s[i]);
                    }
                    break;
                default:
                    break;
            }

            
        }

        return bucket.empty();
    }
};

1047 删除字符串中的重复字符

题目
在这里插入图片描述

class Solution {
public:


    string removeDuplicates(string s) {
        stack<char> tmp;
        for(int i = 0; i < s.size(); i++) {
            if(tmp.empty() || tmp.top() != s[i]) {
                tmp.push(s[i]);
            } else {
                tmp.pop();
            }
        }

        string result;
        while(!tmp.empty()) {
            result.push_back(tmp.top());
            tmp.pop();
        }

        reverse(result.begin(), result.end());
        return result;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值