这是开始刷题的第1天。
看到题目首先想到的是栈,但又转念一想,或许我只用记录左边括号的各个数量,当匹配到右括号时,减去相应的数量即可。写到一半发现了自己的逻辑漏洞,这样写的话,如果括号没有按正确的顺序闭合,我的代码也能通过。所以还是老老实实用栈的想法写。用数组模拟栈,遇到左括号就压入,遇到右括号就和数组最后一位作比对,正确就删除数组中左括号,不正确就返回false。
代码如下:
import java.util.ArrayList;看了一些题解以后,大部分都是用栈来解题,不过我发现我没有直接用java里面的栈类,直接用了数组来模拟栈。 除了栈以外,看到题解有一个思路蛮有趣。先判断字符串长度是否为偶数,先筛选了一部分错误的出去。然后遍历次数为字符串长度的一半,用空字符串来代替"()""[]""{}"。 标签:20,list,else,力扣,括号,return,false,size From: https://www.cnblogs.com/hesy0530/p/17031607.html
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;
}
}
力扣运行结果如下: