LeetCode(20)有效的括号
题目
代码
import java.util.Stack;
class Solution {
public boolean isValid(String s) {
//先判断字符串的长度----通过栈来实现
int len=s.length();
if(len%2!=0){
return false;
}
//创建一个栈
Stack<String> stack=new Stack<>();
for(int i=0;i<s.length();i++){
String data=String.valueOf(s.charAt(i));
if(stack.isEmpty()){
stack.push(data);//判断栈为空的化,把数据放进去
}else{
//取出当前位置的栈顶元素
String tempdata=stack.peek()+data;//顺序问题debug看出来的
if(tempdata.equals("()")||tempdata.equals("{}")||tempdata.equals("[]")){
stack.pop();//如果相等的化,就把元素弹出来
}else{
stack.push(data);
}
}
}
//如果是有效的括号,最后栈的内存是空的
if(stack.isEmpty()){
return true;
}else{
return false;
}
}
}
LeetCode(1047)删除字符串中的所有相邻重复项
题目
代码
import java.util.Stack;
class Solution {
public String removeDuplicates(String s) {
//创建栈----先入后出的架构---用两个栈来做
Stack<String> stack=new Stack<>();
for(int i=0;i<s.length();i++){
String data=String.valueOf(s.charAt(i));
if(stack.isEmpty()){
stack.push(data);
}else{
if(data.equals(stack.peek())){
stack.pop();//相等的化弹出来
}else{
stack.push(data);
}
}
}
if(stack.isEmpty()){
return "";
}else{
//再来一个栈
Stack<String> tempStack=new Stack<>();
while (!stack.isEmpty()) {
if(tempStack.isEmpty()){
tempStack.push(stack.peek());
stack.pop();
}else{
tempStack.push(stack.peek());
stack.pop();
}
}
//装数据
String result="";
while(!tempStack.isEmpty()){
result=result+tempStack.peek();
tempStack.pop();
}
return result;
}
}
}
LeetCode(150)逆波兰表达式求值
题目
代码
import java.util.Stack;
class Solution {
public int evalRPN(String[] tokens) {
//用栈去做---定义一个栈,栈里面存放数据
//判断边角情况
int len=tokens.length;
if(len==1){
return Integer.valueOf(tokens[0]);
}else
{
if(tokens[0].equals("+")||tokens[0].equals("-")||
tokens[0].equals("*")||tokens[0].equals("/")||
tokens[1].equals("+")||tokens[1].equals("-")||
tokens[1].equals("*")||tokens[1].equals("/")){
return -1;
}
}
//现在开始正式处理数据
Stack<Integer> stack=new Stack<>();
for (int i = 0; i < tokens.length; i++) {
if(tokens[i].equals("+")||tokens[i].equals("-")||
tokens[i].equals("*")||tokens[i].equals("/")){
int data1=stack.peek();
stack.pop();
int data2=stack.peek();
stack.pop();//取出数据并弹出来
if(tokens[i].equals("+")){
int data31=data2+data1;
stack.push(data31);
}else if(tokens[i].equals("-")){
int data32=data2-data1;
stack.push(data32);
}else if(tokens[i].equals("*")){
int data33=data2*data1;
stack.push(data33);
}else{
int data34=data2/data1;
stack.push(data34);
}
}else{
int tempdata=Integer.valueOf(tokens[i]);
stack.push(tempdata);
}
}
int result=stack.peek();
return result;
}
}