20. 有效的括号
题目链接:20. 有效的括号
class Solution {
public boolean isValid(String s) {
Deque<Character> stack = new LinkedList();
for(int i=0;i<s.length();i++){
if(s.charAt(i)=='('||s.charAt(i)=='['||s.charAt(i)=='{'){
stack.addFirst(s.charAt(i));
// continue;
}
if(stack.isEmpty()){
return false;
}else if(s.charAt(i)==')'&&!(stack.pollFirst()=='(')){
return false;
}else if(s.charAt(i)==']'&&!(stack.pollFirst()=='[')){
return false;
}else if(s.charAt(i)=='}'&&!(stack.pollFirst()=='{')){
return false;
}
}
if(stack.isEmpty()){
return true;
}else{
return false;
}
}
}
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. 删除字符串中的所有相邻重复项
题目链接:1047. 删除字符串中的所有相邻重复项
class Solution {
public String removeDuplicates(String s) {
//ArrayDeque会比LinkedList在除了删除元素这一点外会快一点
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;
}
}
拿字符串直接作为栈,省去了栈还要转为字符串的操作。
class Solution {
public String removeDuplicates(String s) {
// 将 res 当做栈
// 也可以用 StringBuilder 来修改字符串,速度更快
// StringBuilder res = new StringBuilder();
StringBuffer res = new StringBuffer();
// top为 res 的长度
int top = -1;
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
// 当 top > 0,即栈中有字符时,当前字符如果和栈中字符相等,弹出栈顶字符,同时 top--
if (top >= 0 && res.charAt(top) == c) {
res.deleteCharAt(top);
top--;
// 否则,将该字符 入栈,同时top++
} else {
res.append(c);
top++;
}
}
return res.toString();
}
}
150. 逆波兰表达式求值
题目链接:150. 逆波兰表达式求值
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)){
stack.push(stack.pop()*stack.pop());
}else if("/".equals(s)){
int temp1 = stack.pop();
int temp2 = stack.pop();
stack.push(temp2/temp1);
}else{
stack.push(Integer.valueOf(s));
}
}
return stack.pop();
}
}