代码随想录算法刷题训练营day11

代码随想录算法刷题训练营day11:LeetCode(20)有效的括号、LeetCode(1047)删除字符串中的所有相邻重复项、LeetCode(150)逆波兰表达式求值

LeetCode(20)有效的括号
题目
在这里插入图片描述
代码

import java.util.Stack;

class Solution {
   
    public boolean isValid(String s) {
   
        //先判断字符串的长度----通过栈来实现
        int len=s.length();
        if(len%2!=0){
   
            return false;
        }
        //创建一个栈
        Stack<String> stack=new Stack<>();
        for(int i=0;i<s.length();i++){
   
            String data=String.valueOf(s.charAt(i));
            if(stack.isEmpty()){
   
                stack.push(data);//判断栈为空的化,把数据放进去
            }else{
   
                //取出当前位置的栈顶元素
                String tempdata=stack.peek()+data;//顺序问题debug看出来的
                if(tempdata.equals("()")||tempdata.equals("{}")||tempdata.equals("[]")){
   
                     stack.pop();//如果相等的化,就把元素弹出来
                }else{
   
                    stack.push(data);
                }
            }
        }
        //如果是有效的括号,最后栈的内存是空的
        if(stack.isEmpty()){
   
            return true;
        }else{
   
            return false;
        }

    }
}

LeetCode(1047)删除字符串中的所有相邻重复项
题目
在这里插入图片描述
代码

import java.util.Stack;

class Solution {
   
    public String removeDuplicates(String s) {
   
        //创建栈----先入后出的架构---用两个栈来做
        Stack<String> stack=new Stack<>();
        for(int i=0;i<s.length();i++){
   
             String data=String.valueOf(s.charAt(i));
             if(stack.isEmpty()){
   
                stack.push(data);
             }else{
   
                if(data.equals(stack.peek())){
   
                    stack.pop();//相等的化弹出来
                }else{
   
                    stack.push(data);
                }
             }
        }
        if(stack.isEmpty()){
   
            return "";
        }else{
   
            //再来一个栈
            Stack<String> tempStack=new Stack<>();
            while (!stack.isEmpty()) {
   
                if(tempStack.isEmpty()){
   
                    tempStack.push(stack.peek());
                    stack.pop();
                }else{
   
                    tempStack.push(stack.peek());
                    stack.pop();
                     }
                    }
            //装数据
            String result="";
            while(!tempStack.isEmpty()){
   
                result=result+tempStack.peek();
                tempStack.pop();
            }
            return result;
        }

    }
}

LeetCode(150)逆波兰表达式求值
题目
在这里插入图片描述

代码

import java.util.Stack;

class Solution {
   
    public int evalRPN(String[] tokens) {
   
        //用栈去做---定义一个栈,栈里面存放数据
        //判断边角情况
        
        int len=tokens.length;
        if(len==1){
   
            return Integer.valueOf(tokens[0]);
        }else
        {
   
        if(tokens[0].equals("+")||tokens[0].equals("-")||
           tokens[0].equals("*")||tokens[0].equals("/")||
           tokens[1].equals("+")||tokens[1].equals("-")||
           tokens[1].equals("*")||tokens[1].equals("/")){
   
            return -1;
           }
        }
        //现在开始正式处理数据
        Stack<Integer> stack=new Stack<>();
        for (int i = 0; i < tokens.length; i++) {
   
            if(tokens[i].equals("+")||tokens[i].equals("-")||
            tokens[i].equals("*")||tokens[i].equals("/")){
   
                int data1=stack.peek();
                stack.pop();
                int data2=stack.peek();
                stack.pop();//取出数据并弹出来
                if(tokens[i].equals("+")){
   
                    int data31=data2+data1;
                    stack.push(data31);
                }else if(tokens[i].equals("-")){
   
                    int data32=data2-data1;
                    stack.push(data32);
                }else if(tokens[i].equals("*")){
   
                    int data33=data2*data1;
                    stack.push(data33);
                }else{
   
                    int data34=data2/data1;
                    stack.push(data34);
                }
            }else{
   
                int tempdata=Integer.valueOf(tokens[i]);
                stack.push(tempdata);
            }

        }
        int result=stack.peek();
        return result;

    }
}

相关推荐

  1. 代码随想算法训练|day17

    2024-01-21 20:50:04       45 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-21 20:50:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-21 20:50:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-21 20:50:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-21 20:50:04       18 阅读

热门阅读

  1. 数据结构概述

    2024-01-21 20:50:04       36 阅读
  2. C++学习笔记(四十三):c++ optional

    2024-01-21 20:50:04       28 阅读
  3. react和vue的区别

    2024-01-21 20:50:04       28 阅读
  4. 【Delphi 基础知识 22】TStringList 的详细用法

    2024-01-21 20:50:04       25 阅读
  5. CSS Day10

    CSS Day10

    2024-01-21 20:50:04      25 阅读
  6. Linux设置nginx开机自启动

    2024-01-21 20:50:04       33 阅读
  7. C# 字符串(String)

    2024-01-21 20:50:04       35 阅读
  8. datasets的一些使用技巧

    2024-01-21 20:50:04       33 阅读
  9. 【智驾未来】低代码开发:加速创新交融的利器

    2024-01-21 20:50:04       30 阅读