代码随心录打卡DAY11

1.有效的括号

本题主要是栈的简单应用,java中可以用deque来模拟栈和队列,具体实现采用LinkedList。

  1. 接口实现LinkedList类实现了Deque接口,这意味着LinkedList具有Deque的所有功能。作为Deque的实现,LinkedList可以作为一个双端队列使用,即在两端进行插入和删除操作。

  2. 方法共性:由于LinkedList实现了Deque接口,它继承了Deque的所有方法。这包括在队列头部和尾部添加、删除和检索元素的方法。例如,addFirstaddLastremoveFirstremoveLastpeekFirstpeekLast等。

  3. 灵活性LinkedList作为Deque,可以灵活地用作栈(后进先出)或队列(先进先出)。它也可以简单地作为一个列表来使用,因为它实现了List接口。

总之LinkedListDeque的关系是实现和接口的关系。LinkedList作为Deque的一个具体实现,继承了Deque的所有功能,并增加了基于链表的特性。在选择使用LinkedList还是其他Deque实现(如ArrayDeque)时,应根据具体的应用场景和性能需求来决定。

后面是本题思路我们将所有的左括号的对应右括号入栈,然后再判断是否有一样的右括号进入如果有就把这个右括号给出栈,在所有循环过后才能

 

class Solution {
    public boolean isValid(String s) {
    Deque<Character> deque = new LinkedList<>();
    char ch;
    for(int i=0;i<s.length();i++){
        ch=s.charAt(i);
        if(ch=='('){
            deque.push(')');
            
        }else if (ch == '{') {
            deque.push('}');
        }else if (ch == '[') {
            deque.push(']');
        }else if(deque.isEmpty() || ch!=deque.peek()){
            return false;
        }else{//进入这个判断只能是    不是左括号并且deque不为空且peek==ch
            deque.pop();
        }
    }
    return deque.isEmpty();

    }
}

 1047. 删除字符串中的所有相邻重复项 

       ArrayDeque会比LinkedList在除了删除元素这一点外会快一点
       参考:https://stackoverflow.com/questions/6163166/why-is-arraydeque-better-than-linkedlist 

本题也是很简单的应用,就是注意charAt方法以及因为要顺序输出最后的结果所以要新String一个字符串每次把pop的内容加在前面。

class Solution {
    public String removeDuplicates(String s) {
        ArrayDeque <Character> deque=new  ArrayDeque<>();
        char ch;
        for(int i=0;i<s.length();i++){
            ch=s.charAt(i);
            if(deque.isEmpty()||ch!=deque.peek()){
                deque.push(ch);
            }else{
                deque.pop();
            }
        }
        String str="";
        while(!deque.isEmpty()){
            str=deque.pop()+str;
        }
        return str;
    }
}

 150. 逆波兰表达式求值 

值得注意的就是运算顺序就是除和减都是第二个pop的也就是先进栈的去除,减第一个pop也就是后进栈的,然后减就改成负的加不然你可能需要赋值毕竟第一个pop的是被减的对象,就像除法一样。然后就是push字符串形式的数字要用 Integer.valueOf(s)

class Solution {
    public int evalRPN(String[] tokens) {
        Deque <Integer> stack = new LinkedList<>();
        for(String s: tokens){
            if("+".equals(s)){
                stack.push(stack.pop() + stack.pop());
            } else if ("-".equals(s)) {
                stack.push(-stack.pop() + stack.pop());
            } else if ("*".equals(s)) {
                stack.push(stack.pop() * stack.pop());
            } else if ("/".equals(s)) {
                int temp1=stack.pop();
                int temp2=stack.pop();
                stack.push(temp2/temp1);
            }else{
                stack.push(Integer.valueOf(s));
            }
        }
        return stack.pop();
    }
}

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值