第十一天:题都很简单

博客分享了LeetCode上几道简单题的解法。如Valid Parentheses可用栈解决;Remove All Adjacent Duplicates In String用循环效率低,用StringBuilder可能更快;Evaluate Reverse Polish Notation存一个Integer栈可避免转换。作者表示题较简单,下午有空再做。
  1. Valid Parentheses

简单题,用stack可以直接搞定!

class Solution {
    private boolean isValid(char m, char t){
        return ((m == '(' && t == ')') || (m == '{' && t == '}') || (m == '[' && t == ']'));
    }
    public boolean isValid(String s) {
        Stack<Character> stk = new Stack<>();
        int len = s.length();
        int i = 1;
        stk.push(s.charAt(0));
        while(i < len){
            char t = s.charAt(i);
            if(t == '(' || t == '{' || t == '['){
                stk.push(t);
            }else{
                if(stk.empty()) return false;
                char m = stk.pop();
                if(!isValid(m, t)) return false;
            }
            ++i;
        }

        return stk.empty();
    }
}
  1. Remove All Adjacent Duplicates In String

之前Goldman Sachs考过一道很相似的,我用loop解决的…效率肉眼可见的低。虽然stack解决起来也不快的样子(见下图),但用StringBuilder肯定更快!我一定找时间学一下StringBuilder!

class Solution {
    private String reverse(String a){
        int len = a.length();
        String res = "";
        for(int i = len-1; i >= 0; --i){
            res += a.charAt(i);
        }
        return res;
    }
    
    public String removeDuplicates(String s) {
        Stack<Character> stk = new Stack<>();
        int len = s.length();
        for(int i = 0; i < len; ++i){
            char t = s.charAt(i);
            if(!stk.empty() && stk.peek() == t){
                stk.pop();
            }else{
                stk.push(t);
            }
        }

        String res = "";
        while(!stk.empty()){
            res += stk.pop();
        }

        return reverse(res);
    }
}
  1. Evaluate Reverse Polish Notation

由于Java语言确实不行,只能这么长…
我觉得存一个stack of Integer会好很多,就不用convert了。不过anyways,就这样吧。

class Solution {
    public int evalRPN(String[] tokens) {
        Stack<String> stk = new Stack<>();
        int res = 0;
        for(int i = 0; i < tokens.length; ++i){
            if(tokens[i].equals("+")){
                int a = Integer.parseInt(stk.pop());
                int b = Integer.parseInt(stk.pop());
                Integer tmp = new Integer(a+b);
                stk.push(tmp.toString());
            }else if(tokens[i].equals("-")){
                int a = Integer.parseInt(stk.pop());
                int b = Integer.parseInt(stk.pop());
                Integer tmp = new Integer(b-a);
                stk.push(tmp.toString());
            }else if(tokens[i].equals("*")){
                int a = Integer.parseInt(stk.pop());
                int b = Integer.parseInt(stk.pop());
                Integer tmp = new Integer(a*b);
                stk.push(tmp.toString());
            }else if(tokens[i].equals("/")){
                int a = Integer.parseInt(stk.pop());
                int b = Integer.parseInt(stk.pop());
                Integer tmp = new Integer(b/a);
                stk.push(tmp.toString());
            }else{
                stk.push(tokens[i]);
            }
        }
        return Integer.parseInt(stk.pop());
    }
}

今天题普遍很简单啊,看我下午如果有时间再来做一两道。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值