题目:
这道题有个比较恶心人的地方,就是 "([{}])"这样的例子他也是true的,这个在示例中并没有展示,导致我第一次代码出错
除了这一点之外,这道题还是比较直观的
以示例5说明:
我们可以将它想象成一个栈结构:
取一个字符存入其中:
再取一个字符存入其中:
在我们存第三个字符的时候会发现,这个字符和前一个字符是相对应的:
那我们就把第三个字符和前一个字符都从栈中取出:
接着存第四个字符:
我们发现,他又和前一个字符对应,那么就把这两个字符都取出
最终,栈中就没有字符
那如果是不对应的话呢?
如:"(]"
这个时候我们发现存第二个字符的时候,与前一个字符不匹配,所以直接可以返回 false
综上,我们可以得出代码:
class Solution {
public boolean isValid(String s) {
List<Character> list=new ArrayList<>();
int i=0;
char ch=' ';
while(i<s.length()){
switch (s.charAt(i)){
case '(':
case '[':
case '{':list.add(s.charAt(i));break;
case ')':{
// 当list为空时,没有对应字符进行匹配,直接返回false
if(list.size()==0) return false;
ch=list.get(list.size()-1);
if(ch=='(')
list.remove(list.size()-1);
else
return false;
break;
}
case ']':{
if(list.size()==0) return false;
ch=list.get(list.size()-1);
if(ch=='[')
list.remove(list.size()-1);
else
return false;
break;
}
case '}':{
if(list.size()==0) return false;
ch=list.get(list.size()-1);
if(ch=='{')
list.remove(list.size()-1);
else
return false;
break;
}
default:break;
}
i++;
}
if(list.size()==0) return true;
else return false;
}
}