20.有效括号
执行耗时:54 ms,击败了4.09% 的Java用户
内存消耗:40.6 MB,击败了34.14% 的Java用户
class Solution {
public boolean isValid(String s) {
Deque<Character> que = new ArrayDeque<>();
int len = s.length();
if (len % 2 == 1) return false;
for (int i = 0; i < len; i++) {
char cur = s.charAt(i);
if (que.isEmpty()) {
que.add(cur);
} else if (cur == '(' || cur == '[' || cur == '{') {
que.add(cur);
} else if (cur == ')') {
char last1 = pop(que);
if (last1 != '(') return false;
} else if (cur == ']') {
char last2 = pop(que);
if (last2 != '[') return false;
} else if (cur == '}') {
char last3 = pop(que);
if (last3 != '{') return false;
}
}
return que.isEmpty();
}
public char pop(Deque que1) {
int size = que1.size();
size--;
// 将 que1 导入 que2 ,但留下最后一个值
while (size-- > 0) {
que1.addLast(que1.peekFirst());
que1.pollFirst();
}
char res = (char) que1.pollFirst();
return res;
}
}
执行耗时:1 ms,击败了98.58% 的Java用户
内存消耗:40.6 MB,击败了29.50% 的Java用户
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() || deque.peek() != ch) {
return false;
}else {//如果是右括号判断是否和栈顶元素匹配
deque.pop();
}
}
//最后判断栈中元素是否匹配
return deque.isEmpty();
}
}
1047.删除字符串中所有相邻重复项
class Solution {
public String removeDuplicates(String s) {
Stack<Character> stack = new Stack<>();
int len = s.length();
for (int i = 0; i < len; i++) {
char cur = s.charAt(i);
if (stack.isEmpty()) {
stack.push(cur);
} else if (cur == stack.peek()) {
stack.pop();
} else {
stack.push(cur);
}
}
int size = stack.size();
StringBuilder res =new StringBuilder();
while(!stack.isEmpty()){
res.insert(0,stack.pop());
}
return res.toString();
}
}
150.逆波兰表达式
栈
class Solution {
public int evalRPN(String[] tokens) {
Stack<Integer> stack = new Stack<>();
int len=tokens.length;
for (int i = 0; i <len ; i++) {
String cur =tokens[i];
if(cur.equals("+")){
stack.push(stack.pop()+stack.pop());
} else if (cur.equals("-")) {
stack.push(-stack.pop()+stack.pop());
} else if (cur.equals("*")) {
stack.push(stack.pop()*stack.pop());
} else if (cur.equals("/")) {
int temp1=stack.pop();
int temp2=stack.pop();
stack.push(temp2/temp1);
}else{
stack.push(Integer.valueOf(cur));
}
}
return stack.pop();
}
}