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

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

LeetCode(20)有效的括号
题目
代码随想录算法刷题训练营day11_第1张图片
代码

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)删除字符串中的所有相邻重复项
题目
代码随想录算法刷题训练营day11_第2张图片
代码

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)逆波兰表达式求值
题目
代码随想录算法刷题训练营day11_第3张图片

代码

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;

    }
}

你可能感兴趣的:(代码随想录算法训练营,算法,leetcode,数据结构,java,开发语言)