学习目标:
每天复习代码随想录上的题目1-2道算法(时间充足可以继续)
今日碎碎念:
1)双非本真难受...
力扣刷题
算法
力扣20:20. 有效的括号
class Solution {public boolean isValid(String s) {//这里我们只将右括号放入栈中,有一个左括号,那么就放入它的右括号//等把左括号走完之后,再去对比右括号,此时栈中都是右括号,依次取出来去对比就行了Deque<Character> que = new LinkedList<>();char[] cs = s.toCharArray();char ch;for(int i = 0;i<cs.length;i++){ch = cs[i];if(cs[i]=='('){que.push(')');}else if(cs[i]=='{'){que.push('}');}else if(cs[i]=='['){que.push(']');}else if(que.isEmpty() || que.peek() != ch){//1.如果栈已经空了,但是还有需要比较的字符就false//2.栈里面的字符和我们当前比较的不匹配就falsereturn false;}else{//如果匹配,就弹出栈顶que.pop();}}return que.isEmpty();}
}
力扣1047:1047. 删除字符串中的所有相邻重复项
解答思路:
1)这种使用栈队列来做比较好实现的,其实题目就已经暗示了使用这两种数据结构。
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() || deque.peek() != ch) {deque.push(ch);} else {deque.pop();}}String str = "";//剩余的元素即为不重复的元素while (!deque.isEmpty()) {str = deque.pop() + str;}return str;}
}
力扣1047:150. 逆波兰表达式求值
解答思路:
1)这种使用栈队列来做比较好实现的,其实题目就已经暗示了使用这两种数据结构。
2)需要注意的是减法和除法,有减数被减数,除数和被除数的概念,所以我们需要区分
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)){int temp1 = stack.pop();int temp2 = stack.pop();stack.push(temp2 / temp1);}else if ("*".equals(s)) {stack.push(stack.pop() * stack.pop());}else{stack.push(Integer.valueOf(s));}}return stack.pop();}
}