代码随想录算法训练营第十天|232.用栈实现队列、225.用队列实现栈、20.有效的括号

代码随想录算法训练营第十天|232.用栈实现队列、225.用队列实现栈、20.有效的括号

232.用栈实现队列

请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):

实现 MyQueue 类:

void push(int x) 将元素 x 推到队列的末尾
int pop() 从队列的开头移除并返回元素
int peek() 返回队列开头的元素
boolean empty() 如果队列为空,返回 true ;否则,返回 false

题解:栈先进后出,队列先进先出。

代码

class MyQueue {
    //入栈
    Stack<Integer> s1;
    //出栈
    Stack<Integer> s2;
    public MyQueue() {
        //初始化
        s1=new Stack<>();
        s2=new Stack<>();
    }
    
    public void push(int x) {
        s1.push(x);
    }
    
    public int pop() {
        change();
        return  s2.pop();
    }
    
    public int peek() {
        change();
        return s2.peek();
    }
    
    public boolean empty() {
        if(s2.isEmpty() && s1.isEmpty()){
            return true;
        }
        return false;
    }
    public void change(){
        if(!s2.isEmpty()) return ;
        while(!s1.isEmpty()){
            s2.push(s1.pop());
        }
    }
}

225.用队列实现栈

请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。

实现 MyStack 类:

void push(int x) 将元素 x 压入栈顶。
int pop() 移除并返回栈顶元素。
int top() 返回栈顶元素。
boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。

题解:双端队列。
代码

class MyStack {
    Deque<Integer> de;
    public MyStack() {
        de=new ArrayDeque<>();
    }
    
    public void push(int x) {
        de.add(x);
    }
    
    public int pop() {
        return de.pollLast();
    }
    
    public int top() {
        return de.peekLast();
    }
    
    public boolean empty() {
        return de.isEmpty();
    }
}

20.有效的括号

给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号。

示例 1:

输入:s = “()”
输出:true

题解:用栈实现。遇到左括号将对应的有括号加到栈中,遇到有括号时匹配。

代码

class Solution {
    public boolean isValid(String s) {
        char ch;
        Stack<Character> st=new Stack<>();
        for(int i=0;i<s.length();i++){
            ch=s.charAt(i);
            if(ch=='('){
                st.push(')');
            }else if(ch=='['){
                st.push(']');
            }else if(ch=='{'){
                st.push('}');
            }else if(st.isEmpty() || st.peek()!=ch){  //右括号的情况
                return false;
            }else{
                st.pop();
            }
        }
        return st.isEmpty();
    }
}

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-21 17:16:01       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-21 17:16:01       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-21 17:16:01       45 阅读
  4. Python语言-面向对象

    2024-07-21 17:16:01       55 阅读

热门阅读

  1. npm install 出现canvas错误

    2024-07-21 17:16:01       14 阅读
  2. 作为一名程序员,怎样写出高效简洁的代码?

    2024-07-21 17:16:01       17 阅读
  3. python 爬虫技术 第02节 基础复习

    2024-07-21 17:16:01       16 阅读
  4. 如何在 Odoo 16 中设置和使用系统参数

    2024-07-21 17:16:01       17 阅读
  5. 工具篇(开发利器)

    2024-07-21 17:16:01       19 阅读
  6. 基于centos2009搭建openstack-t版-ovs网络-脚本运行

    2024-07-21 17:16:01       15 阅读
  7. 手写简易版Spring IOC容器04【学习】

    2024-07-21 17:16:01       19 阅读
  8. 网络文件传输

    2024-07-21 17:16:01       19 阅读
  9. vue2获取视频时长

    2024-07-21 17:16:01       19 阅读
  10. mybatis中的useGeneratedKeys和keyProperty

    2024-07-21 17:16:01       19 阅读