1.有效的括号(leetcode20)
给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串 s
,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号
public boolean isValid(String s) { if (s.length() % 2 != 0) { return false; } 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() || deque.peek() != ch) { return false; } else { deque.pop(); } } return deque.isEmpty(); }
2.1047. 删除字符串中的所有相邻重复项
给出由小写字母组成的字符串 S
,重复项删除操作会选择两个相邻且相同的字母,并删除它们。
在 S 上反复执行重复项删除操作,直到无法继续删除。
在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。
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; }
3.150. 逆波兰表达式求值
给你一个字符串数组 tokens
,表示一个根据 逆波兰表示法 表示的算术表达式。
请你计算该表达式。返回一个表示表达式值的整数。
public int evalRPN(String[] tokens) { ArrayDeque<Integer> deque = new ArrayDeque<>(); char ch; for (String s : tokens) { if ("+".equals(s)) { deque.push(deque.pop() + deque.pop()); } else if ("-".equals(s)) { deque.push(-deque.pop() + deque.pop()); } else if ("*".equals(s)) { deque.push(deque.pop() * deque.pop()); } else if ("/".equals(s)) { int temp1 = deque.pop(); int temp2 = deque.pop(); deque.push(temp2 / temp1); } else { deque.push(Integer.valueOf(s)); } } return deque.pop(); }