力扣 20.有效的括号(java)

这是开始刷题的第1天。

 

看到题目首先想到的是栈,但又转念一想,或许我只用记录左边括号的各个数量,当匹配到右括号时,减去相应的数量即可。写到一半发现了自己的逻辑漏洞,这样写的话,如果括号没有按正确的顺序闭合,我的代码也能通过。所以还是老老实实用栈的想法写。用数组模拟栈,遇到左括号就压入,遇到右括号就和数组最后一位作比对,正确就删除数组中左括号,不正确就返回false。

代码如下:

import java.util.ArrayList;

public class ValidParentheses {
public boolean isValid(String s){
int len = s.length();
ArrayList list = new ArrayList(); //用数组模拟栈,遇到左括号就加入,遇到右括号比对后删除。
for(int i=0; i<len; i++){
Character ch = s.charAt(i);
switch(ch){
case '(':
list.add(ch);
break;
case '[':
list.add(ch);
break;
case '{':
list.add(ch);
break;
case ')':
if (list.size() == 0){
return false;
}
else if(list.get(list.size()-1).equals('(')){ //判断括号顺序是否对应
list.remove(list.size()-1);
}
else return false;
break;
case ']':
if (list.size() == 0){
return false;
}
else if(list.get(list.size()-1).equals('[')){
list.remove(list.size()-1);
}
else return false;
break;
case '}':
if (list.size() == 0){
return false;
}
else if(list.get(list.size()-1).equals('{')){
list.remove(list.size()-1);
}
else return false;
break;
}

}
if (list.size() == 0){
return true;
}
else return false;
}

}
力扣运行结果如下:
看了一些题解以后,大部分都是用栈来解题,不过我发现我没有直接用java里面的栈类,直接用了数组来模拟栈。
除了栈以外,看到题解有一个思路蛮有趣。先判断字符串长度是否为偶数,先筛选了一部分错误的出去。然后遍历次数为字符串长度的一半,用空字符串来代替"()""[]""{}"。
posted @ 2023-01-06 22:54  还是叫hesy好了  阅读(61)  评论(0)    收藏  举报