首页 > 其他分享 >代码随想录第11天 || 有效的括号 删除字符串中的所有相邻重复项 逆波兰表达式求值

代码随想录第11天 || 有效的括号 删除字符串中的所有相邻重复项 逆波兰表达式求值

时间:2023-02-26 14:44:07浏览次数:47  
标签:11 deque offer int 随想录 字符串 token pollLast 求值

有效的括号

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

分析: 遇到左括号就offer(对应的右括号), 遇到右括号与栈顶元素进行比较 如果相等则pollLast(). 不相等或栈为空 return FALSE;

class Solution {
    public boolean isValid(String s) {
        Deque<Character> deque= new LinkedList<>();
        char temp;
        for(int i=0;i<s.length();i++){
            temp = s.charAt(i);
            if(temp=='['){
                deque.offer(']');
            }else if(temp=='{'){
                deque.offer('}');
            }else if(temp=='('){
                deque.offer(')');
            }else if(deque.isEmpty()||deque.peekLast()!=temp){
                return false;
            }else {
                deque.pollLast();
            }
        }
        return deque.isEmpty();
    }
}

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

题目: 给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。

在 S 上反复执行重复项删除操作,直到无法继续删除。

在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。

分析: 用栈接收character, 每次接收时, 与peekLast()比较一下, 如果相等则pollLast(), 如果不相等就offer进. 最终用StringBuilder接收 return sb.toString()

class Solution {
    public String removeDuplicates(String s) {
        Deque<Character> queue =  new LinkedList<>();

        for(int i=0;i<s.length();i++){
            if(queue.size()==0||queue.peekLast()!=s.charAt(i)){
            queue.offerLast(s.charAt(i));
            }

            else if (queue.peekLast()==s.charAt(i)){
                queue.pollLast();
            }
        }
        StringBuilder res=new StringBuilder();
        
        while(queue.size()!=0){
            res.append(queue.pollFirst());
        }
        return res.toString();
    }
}

逆波兰表达式求值

题目: 给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。

请你计算该表达式。返回一个表示表达式值的整数。

分析: 如果是操作运算符, 从栈中取两个数进行操作, 如果不是操作运算符 就deque.offer(Integer.valueOf(s)); return deque.pop();

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

  

标签:11,deque,offer,int,随想录,字符串,token,pollLast,求值
From: https://www.cnblogs.com/Liu5419/p/17156683.html

相关文章